首页 > 解决方案 > 如何创建view django manytomany模型

问题描述

一直在尝试将我的食谱成分和成分测量保存到我的食谱数据库中。

我尝试了这样的模型:

class IngredientList(models.Model):
    unit = [
        ('lb', 'pound'),
        ('oz', 'ounce'),
        ('tsp', 'teaspoon'),
        ('tbsp', 'tablespoon'),
        ('G', 'gallon'),
        ('ml', 'mililitre'),
        ('l', 'litre'),
        ('g', 'gram'),
        ('kg', 'kilogram'),

    ]
    name = models.CharField(max_length=100)
    image = models.ImageField(default='img.jpg')
    #recipes = models.ManyToManyField('Recipe', through='RecipeList')
    protein = models.FloatField()
    fat = models.FloatField()
    carb = models.FloatField()
    units = models.CharField(max_length=10, choices=unit)

    def __str__(self):
        return self.name
    return self.ingredient.name


class Recipe(models.Model):

    name = models.CharField(max_length=100)
    ingredients = models.ManyToManyField(
        'IngredientList', through='RecipeList')
    instructions = models.TextField(max_length=3000)
    serving_size = models.IntegerField()
    image = models.ImageField(default='recipe.jpg')
    duration = models.IntegerField(blank=True, default=0)

    def __str__(self):
        return self.name

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


class RecipeList(models.Model):
    recipe = models.ForeignKey(RecipeList, on_delete=models.CASCADE)
    ingredients = models.ForeignKey(IngredientList, on_delete=models.CASCADE)
    measurement = models.FloatField()

    def __str__(self):
        return self.recipe.name

在 stackoverflow 的回答中找到了这个表格:

class RecipeForm(forms.Form):
    name = forms.CharField()
    ingredient = forms.ModelMultipleChoiceField(IngredientList.objects.all())
    instructions = forms.CharField()
    count = forms.IntegerField()
    serving = forms.IntegerField()

还有这个 CreateView:

class RecipeCreateView(FormView):
    template_name = "recipe/shoppinglist_form.html"
    form_class = RecipeForm

    def form_valid(self, form):
        name = form.cleaned_data['name']
        ingredient = form.cleaned_data['ingredient']
        instructions = form.cleaned_data['instructions']
        serving = form.cleaned_data['serving']

        recipe = RecipeList(name=name)
        recipe.save()
        ingredient_list = IngredientList.objects.filter(pk__in=ingredient)
        for i in ingredient_list:
            recipe.ingredients.add(i)

        return render(request, 'recipe/recipe.html')

当我提交时,是的,我确实得到了配方的成分和名称。但是我无法说明每种成分的尺寸,而且其他细节也没有填写(serving_size,说明......)

请有人帮忙!

标签: pythondjangodjango-modelsdjango-viewsdjango-forms

解决方案


推荐阅读