如何将“多对多”包括在内?或者'多对一' Django的通用CreateView中的字段?

时间:2016-06-16 12:31:40

标签: django many-to-many create-view

我有这两个模型:

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

如果有人能帮助我,我会很高兴的。 我假设这个过程对于Many to One字段是相同的,但如果没有,我也想知道如何用它们完成这个。 谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

在你的情况下,你需要创建一个比萨饼模型“比萨饼”说农场。 然后你需要创建模型“Toppings”的对象,如橄榄和蘑菇,如果它们已经不存在了。 然后在保存上述对象后,您需要将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/