2017-10-21 7 views
0

Je suis nouveau au django et je fais l'application de recette de nourriture. Je veux que les utilisateurs puissent ajouter leur propre recette.Ajouter plusieurs champs à la forme de django

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'] 

Au moment de mon formulaire afficher les champs que de ma « recette de classe », mais ce que je veux est d'avoir des ingrédients champ avec option pour ajouter des champs supplémentaires. Avez-vous des suggestions pour le faire? Merci!

+0

Voir ma réponse ci-dessous. Note: Je changerais le modèle 'Ingredients' pour être singulier. Chaque «ingrédient» possède sa propre ligne db. Ou voulez-vous vraiment sauvegarder tous les ingrédients d'une recette comme un grand 'CharField'? – dirkgroten

Répondre

0

Cela va être difficile de faire cela avec le CreateView générique qui est destiné à créer une seule instance d'un modèle.

Ce que vous voulez est une vue (vous pouvez utiliser Django View générique) avec une forme (ModelForm) pour votre Recipe et un formset (voir Django formsets) pour plusieurs Ingredients formes. Dans votre View méthode post vous validez ensuite tous les formulaires et enregistrez les données.

Dans votre code HTML, vous devrez créer des champs supplémentaires dynamiquement en utilisant javascript et mettre à jour le nombre de formsets en conséquence (en management form de la formset)