1

Ein Produkt hat viele Elemente. Ich kann Artikel eines bestimmten Produkts in einer Tabelle anzeigen. Aber wenn ich versuche zu speichern, wird beim Postback nur das letzte Element in der Tabelle für alle Artikel dieses Produkts gespeichert. Dies könnte daran liegen, dass ich nur das letzte Element von meinem HTML zurückgebe. Kann mir irgendjemand irgendeinen eleganten Weg sagen, dies zu tun? Hier ist mein Code.Kann nicht eine Liste von Artikeln aus Django Vorlage speichern

models.py

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

forms.py

class ItemForm(ModelForm): 
    class Meta: 
     model = Item 
     fields = ['Name', 'Tag'] 

views.py

def getItems(request, product_id): 
    items = get_list_or_404(Item, Product = product_id) 
    itemslist = [] 
    if request.method == 'GET': 
     for item in items: 
      itemform = ItemForm(instance=item) 
      itemlist.append(itemform) 
    else: 
     for item in items: 
      itemform = ItemForm(request.POST, instance=item) 
      itemlist.append(itemform) 
     for tempform in itemlist: 
      if tempform.is_valid(): 
       tempform.save() 
    return render(request, 'knowledgebase.html', {'product_id': product_id, 'itemslist': itemslist}) 

html-Datei:

<tbody> 
    {% for itemform in itemslist%} 
     <tr> 
      <td class="td"> {{ itemform.Name }} </td> 
      <td> {{ itemform.Tag }} </td> 
     </tr> 
    {% endfor %} 
</tbody> 
+4

Sie sollten ein Formset für diese Art von Sache verwenden. –

+1

Um zu Mr. Rosemans Kommentar hinzuzufügen, siehe https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/#model-formsets, um zu erfahren, wie Sie ein Model Formset einrichten können. Der Ansichtscode wäre ziemlich derselbe. – theWanderer4865

Antwort

1

Das einzige letzte Formular ist das Speichern, da Sie der Vorlage eine Liste mit einzelnen zu rendernden Formularen senden. Ohne den Rest deines HTML zu sehen, würde ich sagen, dass du nur einen Submit-Button hast. Da die anderen Formulardaten werden nicht auf einreichen zugeführt werden sie nicht gebunden betrachtet und somit nicht wahr wird zurückkehren, wenn is_valid() aufgerufen wird und wird nicht tempform.save() https://docs.djangoproject.com/en/1.9/ref/forms/api/#bound-and-unbound-forms

Versuchen Sie, den Wert jedes Ausdrucken erreichen tempform.is_bound(), um dies zu testen.

Eine Möglichkeit, dies zu verringern, besteht darin, Formsets zu verwenden oder ein eigenes benutzerdefiniertes Formular mit mehreren Feldern für jede Modellinstanz zu erstellen.

Verwandte Themen