2016-05-03 3 views
0

Ich habe jede Antwort für diese Frage gelesen, aber keiner von ihnen löste mein Problem vollständig. Ich hoffe, jemand kann mir helfen zu verstehen, was in meinem Code falsch ist. Ich habe ein Feld in meinem Modell und möchte, dass alle Werte in diesem Feld in einem Dropdown in meinem Formular angezeigt werden. Ich konnte das erreichen, aber wenn ich versuche zu speichern, heißt es "Wählen Sie eine gültige Wahl. Diese Wahl ist keine der verfügbaren Möglichkeiten." Jede Hilfe würde sehr geschätzt werden.Django Form wirft wählen gültige Auswahl

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-Datei

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

Welche Werte haben die Auswahlfeldoptionen im gerenderten HTML? Versuchen Sie außerdem, Ihr Formular- und Modellfeld mit Kleinbuchstaben zu benennen. Bewahren Sie das Titlecase und das camel casing für Ihre Klassennamen auf. https://www.python.org/dev/peps/pep-0008/ –

+0

Die Auswahlbox-Option listet alle Artikelnamen wie erwartet auf. Wenn 10 Elemente vorhanden sind, werden alle Namen für diese Elemente im Auswahlfeld aufgeführt. Und danke für deinen Vorschlag, dem werde ich folgen. – hermy67

Antwort

1

Versuchen Sie diese

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

leider, das hat nicht funktioniert – hermy67

+0

bekommen keinen Fehler oder keinen Wert angezeigt. kannst du bitte den Code teilen? –

+0

Es war meine Schuld, Ihre Antwort funktionierte! ich danke dir sehr. – hermy67

Verwandte Themen