2015-10-16 106 views
2

我有2個應用程序。django表單錯誤:「選擇不是可用選項之一」

輸入:具有包含下拉列表的區域:區域。下拉列表值來自結果數據庫(由用戶上傳)。填寫表格時,用戶需要從下拉列表中選擇值。

結果:對數據庫

現在我可以顯示下拉列表從輸入表格「輸入」應用程序的數據庫。 (如圖所示)。 enter image description here

我現在面臨的問題是,選擇的選擇,並提交後,出現如下圖所示的錯誤:

錯誤顯示像:選擇一個有效的choice.The選擇沒有之一可用的選擇。然後我不明白爲什麼,因爲我確實從下拉列表中選擇了選項。

在此先感謝您的幫助,指出問題所在。

models.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 

forms.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') 

views.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)) 

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>  

回答

1

謝謝你的職位:django forms give: Select a valid choice. That choice is not one of the available choices

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()) 

改變取代了以往

region=forms.ModelChoiceField(queryset=Dupont.objects.values('region').distinct(),widget=forms.Select())" 

,然後它的作品。但我不明白爲什麼,希望有人能解釋。

相關問題