我目前有一组模型,看起来类似于此人为设计的代码:

class Pizza(models.Model):
    price = models.FloatField()
    topping = models.ManyToManyField(RouteGate, through="PizzaToppings")

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

class PizzaToppings(models.Model):
    class Meta:
        ordering=["order_to_add_topping"]

    pizza = models.ForeignKey(Pizza)
    topping = models.ForeignKey(Topping)
    order_to_add_topping = models.IntegerField()


我的问题是,当我尝试按PizzaToppings ManyToMany额外字段表中指定的顺序访问披萨的配料时会发生什么。假设比萨饼有奶酪和火腿,并且PizzaToppings数据中的order_to_add_topping分别设置为0和1:

>>> pizza = Pizza.objects.get(pk=490)
>>> pizza.toppings.all()[0].name
'Ham'


那应该说“奶酪”。我本以为RelationManager会尊重ordering元类字段,但似乎没有。因此,我想不应使用pizza.toppings.all()[0].name访问添加到比萨饼中的第一个浇头的名称。

应该如何访问它?我的模型查询有问题吗?还是我如何建立模型?

最佳答案

您的模型很好,您只需要查询该关系,因为现在您有了一个带有额外字段的“直通”关系。在您的情况下,该关系将自动创建为topping_relationship,因此您的查询应为:

pizza.toppings.order_by('topping_relationship__order_to_add_topping')

10-06 00:01