如何在 Django 中按 属性 的 ManyToMany 对象排序?
How to sort by a propery of ManyToMany Object in Django?
我正在尝试通过 ManyToMany 对象的 "order" 属性 来过滤对象。这里棘手的部分是我试图从查询中排除一个特定的单位,但似乎找不到如何去做。
所以,查询基本上应该做的是:
- 获取分配给特定单元(M2M 字段中的单元之一)的所有问题对象
- 按分配给问题的所有其他单元的 "order" 属性 对它们进行排序
例子
ID Question Question.unit
1 question1 unit1, unit2
2 question2 unit1, unit3
3 question3 unit1, unit4
ID Unit Unit.order
1 unit1 1
2 unit2 2
3 unit3 3
4 unit4 4
代码:
#views - my code so far, seems to filter by all units
def get_questions_beside_unit():
questions = Question.objects.filter(unit=quiz.unit).order_by('unit__order')
#models
class Question(models.Model):
...
unit = models.ManyToManyField(Unit)
class Unit(models.Model):
order = models.IntegerField()
您需要使用预取,这样您就可以控制从数据库中获取哪些相关对象。
from django.db.models import Prefetch
pf = Prefetch('unit', Unit.objects.filter(id__in=[1,2,3,4]))
questions = Question.objects.prefetch_related(pf).order_by('unit__order')
排序时,只有符合Prefetch过滤条件的Unit,所以应该会得到你想要的结果。在我的示例中,它仅使用 ID 为 [1,2,3,4]
的单位
我正在尝试通过 ManyToMany 对象的 "order" 属性 来过滤对象。这里棘手的部分是我试图从查询中排除一个特定的单位,但似乎找不到如何去做。
所以,查询基本上应该做的是:
- 获取分配给特定单元(M2M 字段中的单元之一)的所有问题对象
- 按分配给问题的所有其他单元的 "order" 属性 对它们进行排序
例子
ID Question Question.unit
1 question1 unit1, unit2
2 question2 unit1, unit3
3 question3 unit1, unit4
ID Unit Unit.order
1 unit1 1
2 unit2 2
3 unit3 3
4 unit4 4
代码:
#views - my code so far, seems to filter by all units
def get_questions_beside_unit():
questions = Question.objects.filter(unit=quiz.unit).order_by('unit__order')
#models
class Question(models.Model):
...
unit = models.ManyToManyField(Unit)
class Unit(models.Model):
order = models.IntegerField()
您需要使用预取,这样您就可以控制从数据库中获取哪些相关对象。
from django.db.models import Prefetch
pf = Prefetch('unit', Unit.objects.filter(id__in=[1,2,3,4]))
questions = Question.objects.prefetch_related(pf).order_by('unit__order')
排序时,只有符合Prefetch过滤条件的Unit,所以应该会得到你想要的结果。在我的示例中,它仅使用 ID 为 [1,2,3,4]
的单位