假设我们有这些模型:
class A(models.Model):
field = models.ManyToManyField(B, through="C")
class B(models.Model):
value = models.CharField()
class C(models.Model):
a = models.ForeignKey(A)
b = models.ForeignKey(B)
order = models.IntegerField()
是否有提取B的查询集的选项,但是考虑了订单字段?
执行a.c_set.all()
返回C类的查询集(但是已经订购了)。
执行a.fields.all()
有效,但查询集无序。
我需要一个用于初始化formset的查询集。
我希望这是可以理解的 - 它已经很晚了,我已经无法清楚地思考了......如果有人有任何问题,我会尝试清除它。
提前致谢
答案 0 :(得分:1)
如果您在模型ordering
上放置C
,则C
上的所有查询集都将遵循该顺序:
class C(models.Model):
class Meta:
ordering = ('order', )
现在,如果您想要与B
相关的A
个对象,则可以根据B
的排序对C
进行排序:
b_results = a.fields.order_by('c')
如果order_by('c')
不够清晰,您可以将模型更改为:
class C(models.Model):
a = models.ForeignKey(A, related_name='a_relationship')
b = models.ForeignKey(B)
order = models.IntegerField()
class Meta:
ordering = ('order', )
然后你可以这样做:
b_results = a.fields.order_by('a_relationship')
答案 1 :(得分:0)
使用C
模型反向关系来执行订单,例如
a.fields.order_by(c__order)