django 表单错误:“该选择不是可用选项之一”

Hél*_*éna 5 python django

我有 2 个应用程序。

输入:具有包含下拉列表的形式:区域。下拉列表值来自结果数据库(由用户上传)。填写表单时,用户需要从下拉列表中选择值。

结果:有数据库

现在我可以在输入表单中显示“输入”应用程序数据库中的下拉列表。(如图所示)。 在此输入图像描述

我现在遇到的问题是选择完选项并提交后,出现如下错误:

该错误显示如下:选择一个有效的选项。该选项不是可用选项之一。然后我不明白为什么,因为我确实从下拉列表中选择了选项。

预先感谢您帮助查明问题。

模型.py

from django import forms
from django.forms import ModelForm
from django.db import models
from dupont.models import Result
from datetime import date
from django.forms import widgets

class Input(models.Model):
    company=models.CharField(max_length=100)
    region=models.CharField(max_length=100)

    def __unicode__(self):
        return self.company
Run Code Online (Sandbox Code Playgroud)

表格.py

from django import forms
from django.forms import ModelForm
from .models import Input
from dupont.models import Result
from django.contrib.auth.models import User,Group
from django.forms import widgets
from functools import partial
from django.forms.utils import ErrorList

class InputForm(forms.ModelForm):
    company=forms.CharField(widget=forms.TextInput, label="Company",error_messages={'required': 'Please enter the company name'},required=True)
    region = forms.ModelChoiceField(queryset=Dupont.objects.values('region').distinct(),widget=forms.Select(),empty_label="(Global)",to_field_name="supply_chain")
    error_css_class='error'
    required_css_class = 'required'

    class Meta:
        model = Input
        fields = ('company', 'region')
Run Code Online (Sandbox Code Playgroud)

视图.py

from django.http import HttpResponseRedirect
from django.shortcuts import render,render_to_response,get_object_or_404
from inputform.forms import InputForm
from inputform.models import Input
from dupont.models import Result
from django.views.decorators.csrf import csrf_exempt
from django.views.generic.list import ListView
from django.contrib import messages
from django.template import RequestContext
from django.shortcuts import redirect

@csrf_exempt
def input(request):
    if request.method == 'POST':
        form = InputForm(request.POST)
        if form.is_valid():
            company = form.cleaned_data['company']
            region = form.cleaned_data['region']    /Is this one correct?
            form.save()
            return redirect('result')
        else:
            print form.errors

    else:
        form=InputForm()
    return render_to_response('inputform.html',{'form': form},context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

html

<form method="post" action="{% url 'input' %}">
        {% csrf_token %}

        <!--company--> 
        <div class="field">
            {{ form.company.errors }}
            <label for="{{ form.company.id_for_label }}">Company:</label>
            {{ form.company }}
        </div>

        <!--Region-->
        <div class="field" >
            <label> Select the Region:
            {{ form.region }}
                {% for region in form.region.choices %}
                     <option value="region" name= "region" id="id_region">{{region}} </option>
                {% endfor %}
            </label>
        </div>

        <!--submit-->
        <div class="fieldWrapper">
        <p><input type="submit" value="Submit" /></p></div>

 </form>    
Run Code Online (Sandbox Code Playgroud)

Hél*_*éna 2

感谢您的帖子:django 表单给出:选择一个有效的选择。该选择不是可用的选择之一

我改变了

iquery = Result.objects.values_list('region', flat=True).distinct()
iquery_choices = [('', 'None')] + [(region,region) for region in iquery]
region = forms.ChoiceField(iquery_choices,required=False, widget=forms.Select())
Run Code Online (Sandbox Code Playgroud)

替换之前的

region=forms.ModelChoiceField(queryset=Dupont.objects.values('region').distinct(),widget=forms.Select())"
Run Code Online (Sandbox Code Playgroud)

然后就可以了。但不明白为什么,希望有人能解释一下。