2016-05-03 101 views
0

我已經閱讀了這個問題的每一個答案,但沒有一個完全解決了我的問題。我希望有人能幫助我理解我的代碼中的錯誤。我在模型中有一個字段,我希望該字段中的所有值都顯示在我的表單的下拉列表中。我能夠實現這個目標,但是當我試圖保存時,它會說「選擇一個有效的選擇,這個選擇不是可用的選擇之一。」任何幫助將不勝感激。Django形式拋出選擇有效的選擇

models.py

class Item(models.Model): 
    Product = models.ForeignKey("Product", related_name = "Items") 
    Name = models.CharField(max_length=1000, blank=True, null=True) 
    Tag = models.CharField(max_length=1000, blank=True, null=True) 

forms.py

class ItemForm(ModelForm): 
    items = Item.objects.values_list('Name', flat=True) 
    item_choices = [(item, item) for item in items] 
    Name = forms.ModelChoiceField(items, widget=forms.Select()) 
    class Meta: 
     model = Item 
     fields = ['Name', 'Tag'] 

views.py

def newknowledgebase(request): 
    itemformset = modelformset_factory(Item, form=ItemForm, extra=2) 
    items = itemformset(queryset=Item.objects.none(), prefix='items',) 
    if request.method=='POST': 
     items = itemformset(request.POST, queryset=Item.objects.none(), prefix='items',) 
     item = request.POST.get('items') 
     for form in items: 
      form.fields['Name'].choices = [(item, item)] 
     if items.is_valid(): 
      items.save() 

    context = { 
     'items':items, 
    } 
    return render(request, 'newknowledgebase.html', context) 

HTML文件

<div id="items" class="panel-collapse collapse"> 
     <table class="table table-bordered"> 
      <tbody> 
       {{ items }} 
      </tbody> 
     </table> 
    </div> 
+0

選擇框選項在呈現的HTML中有什麼值?另外,嘗試使用小寫來命名您的表單和模型字段。將標題和駱駝套放在你的名字上; https://www.python.org/dev/peps/pep-0008/ –

+0

選擇框選項按預期列出所有項目名稱。如果有10個項目,則這些項目的所有名稱都列在選擇框中。並感謝您的建議,我會遵循這一點。 – hermy67

回答

1

試試這個

Name = forms.ChoiceField(item_choices, widget=forms.Select()) 
+0

不幸的是,沒有任何工作或者 – hermy67

+0

得到任何錯誤或沒有值顯示。你能分享一下代碼嗎? –

+0

這是我的錯,你的答案奏效!非常感謝。 – hermy67