0

我有这两个模型:

class Pizza(models.Model):
    pizza_type = models.CharField(max_length=500)

class Toppings(models.Model):
    name = models.CharField(max_length=500)
    pizza_types = models.ManyToManyField(Pizza, null=True, blank=True)

我想在比萨创建视图中设置比萨的浇头,但我不知道要传递给它的字段,或者它应该是一个字段。

class CreatePizza(CreateView):
    model = Pizza
    fields = ['pizza_type', '?How to reference a topping here?' ]

如果有人能帮助我,我会很高兴。我认为多对一字段的过程是相同的,但如果不是,我也想知道如何与它们一起完成此操作。谢谢你。

4

1 回答 1

0

如果你在Toppings模型中创建ManyToManyField字段,那么在创建Pizza模型的对象时,你不能有一个字段来说明当 Django从你的 models.py 中读取Pizza模型时披萨可以有什么类型的配料,它没有任何这样的领域。

简而言之,您只能告诉具有 ManyToManyField 的模型的对象,它与其他模型“X”的所有对象相关联。如果不先创建和保存它们,您也无法关联它们。

在您的情况下,您需要创建一个模型为“Pizza”的披萨,例如 Farmhouse。然后你需要创建模型“Toppings”的对象,比如 Olives 和 Mushrooms,如果它们已经不存在的话。然后在保存上述对象后,您需要将 Farmhouse 添加到 Olives 和 Mushrooms。

所以现在当你查询 Farmhouse Pizza 的配料时,你会得到一个列表,其中包含

[<Toppings: Olives> <Toppings: Mushrooms>]

您也可以通过在Pizza模型中设置ManyToManyField来执行此操作,从而再次创建 Pizza Model 的对象,例如 Farmhouse,然后向其添加配料橄榄和蘑菇。

请参阅此内容以获得更好的理解:https ://docs.djangoproject.com/en/1.9/topics/db/examples/many_to_many/

于 2016-06-16T18:38:17.440 回答