如何在Django中按多个对象的属性排序?
我试图通过多个对象的“order”属性过滤对象。这里棘手的部分是,我试图从查询中排除一个特定的单元,但似乎找不到如何做 因此,查询应该做的基本工作是:如何在Django中按多个对象的属性排序?,django,django-queryset,Django,Django Queryset,我试图通过多个对象的“order”属性过滤对象。这里棘手的部分是,我试图从查询中排除一个特定的单元,但似乎找不到如何做 因此,查询应该做的基本工作是: 获取分配给特定单元的所有问题对象(M2M字段中的单元之一) 按照分配给问题的所有其他单元的“顺序”属性对它们进行排序 范例 ID Question Question.unit 1 question1 unit1, unit2 2 question2 unit1, unit3 3 question3 unit
ID Question Question.unit
1 question1 unit1, unit2
2 question2 unit1, unit3
3 question3 unit1, unit4
代码:
#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')
在排序过程中,只有符合预取过滤器的单元,因此您应该得到想要的结果。在我的示例中,它只使用id为[1,2,3,4]的单位。有什么原因不能使用
exclude()
?我想我的问题是,我试图按特定的“单位”顺序对它进行排序。在我的例子中,不是“unit1”,而是在每个“问题”中的另一个有趣的问题,我将尝试:)
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')