簡體   English   中英

單擊提交按鈕時,下拉列表未在Django表單的DB中填充

[英]Drop down lists not populating in DB in Django Forms on click of submit button

我在表格內有一張桌子。 如下圖所示:

{% 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})

在表格中,有一個下拉列表(選擇標記)。 當用戶從下拉列表中選擇某項並單擊“保存”按鈕時,我想將數據保存到數據庫中。 我知道我在視圖中的某個地方弄錯了。

不幸的是,您在這里做錯了幾件事。

主要問題是您正在將request.POST['extensions']作為data參數傳遞給POST上的表單; 但是該參數期望整個POST,而不是單個字段。

鏈接到的是您沒有為模型中的字段和表單中的字段使用相同的名稱。 盡管您在評論中說這是故意的,但似乎沒有任何理由,這正在破壞事情。 給他們起同樣的名字。

第三,您不要讓Django填充表格,或者在無效時顯示任何錯誤。 您不應該顯式地傳遞sipextenionset (盡管您實際上似乎根本沒有傳遞sipextenionset ,所以我不確定它的來源),並且您當然也不應顯式地進行迭代。 您應該讓Django顯示字段:

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

最后,我完全無法理解您正在使用外部for循環遍歷numbers 您最終將獲得幾個extension值,這是表單,模型或視圖所不希望的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM