【问题标题】:Drop down lists not populating in DB in Django Forms on click of submit button单击提交按钮时,下拉列表未填充到 Django 表单中的数据库中
【发布时间】:2018-01-31 07:44:38
【问题描述】:

我有一个表格里面的表格。如下所示:

{% extends "base.html" %}

{% block title %}Title{% endblock title %}
{% block content %}
<form actions="" method="post">
{% csrf_token %}
<table>
    <table border = "1" cellpadding = "10" cellspacing = "10" bordercolor = "green">
    <tr>
        <th>numbers</th>
        <th>Extension</th>
        <th>Vendor</th>
    </tr>
        {% for number in numbers %}
    <tr>
        <td>{{ number }}</td>
        <td class = "select">Select Extension
        <select name="extensions">
            {% for obj in sipextensionsets %}
            <option value={{obj.sip_extension}}>{{ obj.sip_extension }}</option>
            {%  endfor %}
        </select>
        </td>

        <td>vendor</td>
    </tr>
        {% endfor %}
</table>

<input type="submit" value="save"/>
</form>
{% endblock content %}

我的 forms.py 如下:

from django import forms

from .models import column

class didsForm(forms.ModelForm):

    class Meta:
        model = column
        fields = ('extension')

下面是我的views.py

def saveintodb(request):
    try:
       instance = coloumn.objects.get(pk=1)
    except:
        instance = coloumn(pk=1)
        instance.save()
    if request.method == 'POST':
        dids_form = didsForm(data=request.POST['extensions'], instance=instance)
        if dids_form.is_valid():
            dids_form.save()
            messages.success(request, "Settings updated. Please apply settings.")
        else:
            messages.error(request, "Error: Invalid settings.")
    else:
        dids_form = didsForm(instance=instance)

    return render(request, 'dids/index.html', {'dids_form': dids_form})

在表格中,有一个下拉菜单(选择标签)。当用户从下拉列表中选择某些内容并单击保存按钮时,我想将数据保存到数据库中。我知道我在观点的某个地方搞错了。

【问题讨论】:

  • 在 htm 中您命名了字段扩展名,但在 forms.py 扩展名中。检查哪个是正确的。
  • @neverwalkaloner 在forms.py中是模型的列名。在 html 中,它是 select 标签的 name 属性。所以两者都是正确且相互独立的。
  • 另外,fields 必须是 forms.py 中的一个元组。后面加逗号,比如fields = ('extension',)
  • @zaidfazil 我刚才试过了,它并没有改变任何东西。数据库仍未填充
  • 你调试了吗?当你保存数据时,request.POST['extensions'] 里面会出现什么?

标签: python html django django-forms


【解决方案1】:

很遗憾,您在这里做错了一些事情。

主要问题是您在 POST 上将 request.POST['extensions'] 作为 data 参数传递给表单;但该参数需要整个 POST,而不是单个字段。

与此相关的是您没有为模型中的字段和表单中的字段使用相同的名称。尽管您在评论中说这是故意的,但似乎没有理由这样做,而且它正在破坏事物。给他们取相同的名字。

第三,您不能让 Django 填充表单,或者在表单无效时显示任何错误。你不应该明确地传递sipextenionset(尽管你实际上似乎根本没有传递它,所以我不确定它来自哪里),你当然不应该明确地迭代。您应该让 Django 显示该字段:

   <td>{{ number }}</td>
   <td class="select"><label for="id_extension">Select Extension</label>
   {{ form.extension }}
    </td>

最后,我完全不明白你在通过numbers 使用外部 for 循环做什么;你最终会得到几个extension 的值,这不是你的表单、模型或视图所期望的。

【讨论】:

  • 有很多扩展,我需要将其中一个扩展映射到数字,然后更新数据库。这就是为什么扩展在下拉列表中,以便用户可以选择“众多扩展之一”。我需要的是,一旦用户选择扩展并单击保存按钮,它应该更新数据库。来自views.py的sipextpensionsets,我使用django ORM查询数据库。我没有在这里粘贴那部分代码,你想要我吗?我没有收到您的 request.POST 部分,因为我对 Django 很陌生,所以如果您能解释更多信息,我将不胜感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多