2016-05-03 11 views
0

私はこの質問のすべての答えを読んだが、誰も私の問題を完全に解決していません。誰かが自分のコードで何が間違っているのかを理解する助けになることを願っていますモデルにフィールドがあり、そのフィールドのすべての値をフォームのドロップダウンに表示する必要があります。私はそれを達成することができましたが、保存しようとすると「有効な選択肢を選択してください。その選択肢は利用可能な選択肢の1つではありません」と述べています。どんな助けでも大歓迎です。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

関連する問題