2017-10-21 5 views
0

Ich bin neu in Django und ich mache Essen Rezept App. Ich möchte, dass die Benutzer ihr eigenes Rezept hinzufügen können.Mehrere Felder zu Django Formular hinzufügen

models.py

from django.db import models 
from django.core.urlresolvers import reverse 

class Recipe(models.Model): 
    def __unicode__(self): 
     return self.recipe_name 

    recipe_name = models.CharField(max_length=250) 
    category = models.CharField(max_length=50) 
    description = models.CharField(max_length=1000) 
    image = models.CharField(max_length=1000) 
    prep_time = models.CharField(max_length=250) 
    difficulty = models.CharField(max_length=50) 
    instructions_url = models.CharField(max_length=1000) 

    def get_absolute_url(self): 
     return reverse('detail', kwargs={'pk': self.pk}) 

class Ingredients(models.Model): 
    def __unicode__(self): 
     return self.ingredients 

    recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE) 
    ingredients = models.CharField(max_length=1000) 

views.py

class RecipeCreate(CreateView): 
    model = Recipe 
    fields = ['recipe_name', 'category', 'image', 'prep_time', 'difficulty', 'instructions_url'] 

Im Moment meine Form nur die Felder angezeigt werden von meiner "Klasse Rezept", aber was ich will ist Bestandteil Feld zu haben, mit Option zum Hinzufügen zusätzlicher Felder. Hast du irgendwelche Vorschläge, wie das geht? Vielen Dank!

+0

Siehe meine Antwort unten. Hinweis: Ich würde das 'Ingredients'-Modell ändern, um Singular zu sein. Jede Zutat hat ihre eigene Zeile db. Oder möchtest du wirklich alle Zutaten eines Rezepts als großes langes "CharField" speichern? – dirkgroten

Antwort

0

Es wird schwierig sein, das mit dem generischen CreateView zu tun, das nur eine Instanz eines Modells erstellen soll.

Was Sie wollen, ist eine Ansicht mit einem Formular (Sie die generische Django View verwenden könnten) (ModelForm) für Ihre Recipe und ein formset (siehe Django formsets) für mehr Ingredients Formen. In Ihrer View 's post Methode validieren Sie dann alle Formulare und speichern die Daten.

in Ihrem HTML, werden Sie entsprechend zusätzliche Felder dynamisch mit Hilfe von Javascript und aktualisieren Sie die Anzahl der Formularsätze erstellen müssen (in der formset des management form)

Verwandte Themen