python - 在 Django 模型中自动对 ManyToMany 字段进行排序

标签 python django django-models manytomanyfield

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

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 额外字段表中指定的顺序访问披萨的浇头时会发生什么。假设披萨有奶酪和火腿,PizzaToppings数据中的order_to_add_topping分别设置为0和1:

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

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

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

最佳答案

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

pizza.toppings.order_by('topping_relationship__order_to_add_topping')

关于python - 在 Django 模型中自动对 ManyToMany 字段进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4599512/

相关文章:

python - Pyspark CSV 到 RDD 到坐标矩阵

python - 一起使用 virtualenvwrapper 和 pyenv

python - 如何通过发送与模型相关的objects.all()来获取外键

python - Django - 在无效表单提交中保存字段

django - 授予访问 token 类型authorization_code 出现错误 invalid_client

django - 'RelatedManager' 对象不是可迭代的 Django

python - 从日期字段到日期时间字段的数据迁移

Django 和外键反向关系

python - 运行 scipy interpolate 时出现段错误

python - Repl.it SMTPLIB OSError : [Errno 99] Cannot assign requested address