django 如何记录FK到其他两个模型的数据?

xdnvmnnf  于 2022-12-14  发布在  Go
关注(0)|答案(1)|浏览(110)

以“Pizza”为例,我有一个浇头模型、一个PizzaTemplate模型和一个“Pizza”,现在我需要记录每个比萨的浇头数量。
例如,我有一个'辣香肠比萨',我需要记录1勺奶酪,1勺辣香肠。然后我可能有一个'辣香肠比萨-额外的辣香肠',这将是1勺奶酪和2勺辣香肠,它使用相同的选择浇头,这已经定义,我只需要记录多少每一个。
我的当前models.py如下所示:

class Topping(models.Model):
    name = models.CharField(max_length=100)
    unit = models.CharField(max_length=100)

class PizzaTemplate(models.Model):
    name = models.CharField(max_length=100)
    toppings = models.ManyToManyField(Topping)

class Pizza(models.Model):
    name = models.CharField(max_length=100)

我想我需要另一个这样的模型:

class Ingredients(models.Model):
    pizza = models.ForeignKey(Pizza)
    topping = models.ForeignKey(Topping)
    amount = models.IntegerField()

我不确定这是正确的方法还是有更聪明的方法?
这个想法是为了能够创建一个新的比萨饼,选择一个浇头模板,然后为这个特定的比萨饼选项指定每种浇头的不同数量。
我的想法是在页面加载时为每个输入动态创建表单,例如,获取浇头列表并为每个输入生成一个标签和输入框,但我越是沿着这条路走,我就越觉得我在违背规则,可能有一个更好/更明显的方法。
我在看https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships,但我不确定这是否与我正在尝试的内容完全相关。

1szpjjfi

1szpjjfi1#

您可以尝试使用模型表单。
https://docs.djangoproject.com/en/4.1/topics/forms/modelforms/

class PizzaForm(forms.ModelForm):
    class Meta:
        model = Pizza
        fields = ('name',)

class IngredientsForm(forms.ModelForm):
    pizza = forms.ModelChoiceField(queryset=PizzaTemplate.objects.all())
    toppings = forms.ModelMultipleChoiceField(queryset=Topping.objects.all(), widget=forms.CheckboxSelectMultiple())

    class Meta:
        model = Ingredients
        fields = ('pizza', 'toppings', 'amount')

在视图中,可以使用这些表单创建新的比萨饼并指定比萨饼的配料。

from django.shortcuts import render
from .forms import PizzaForm, IngredientsForm

def create_pizza(request):
    if request.method == 'POST':
        pizza_form = PizzaForm(request.POST)
        ingredients_form = IngredientsForm(request.POST)
        if pizza_form.is_valid() and ingredients_form.is_valid():
            pizza = pizza_

相关问题