1

我目前有一组看起来类似于这个人为代码的模型:

class Pizza(models.Model):
    price = models.FloatField()
    topping = models.ManyToManyField(Topping, 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 extra fields 表中指定的顺序访问比萨饼的浇头时会发生什么。假设披萨有奶酪和火腿,PizzaToppings 数据中的 order_to_add_topping 分别设置为 0 和 1:

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

那应该说“奶酪”。我原以为 RelationManager 会尊重orderingMeta 类字段,但它似乎没有。所以我猜不应该使用pizza.toppings.all()[0].name.

应该如何访问?是我的模型查询有问题还是我的模型设置方式有问题?

4

1 回答 1

7

您的模型很好,您只需要查询关系,因为现在您与额外字段建立了“通过”关系。在您的情况下,该关系会自动创建为 topping_relationship,因此您的查询应该是:

pizza.toppings.order_by('topping_relationship__order_to_add_topping')
于 2011-01-05T00:53:54.347 回答