如何在django模型中排除相等的列?

时间:2014-01-16 07:30:20

标签: python django django-models django-queryset

我有一个模型,有2个外国文件指向同一个模型:

class Student(models.Model):
    old_school = model.ForeignField(school)
    new_school = model.ForeignField(school)

我想找到old_school的学生!= new_school。我试过这些:

Student.objects.all().exlude(old_school = new_school)
Student.objects.all().exlude(self.old_school = self.new_school)

但它们都不起作用。似乎模型经理不能参考new_school。有什么方法可以做这样的查询吗?或者我必须在python代码中手动检查不相等:

if student.old_school != student.new_school:
   s_list.append(student)

2 个答案:

答案 0 :(得分:3)

您可以使用QF

来实现这一目标
Student.objects.filter(~Q(old_school=F('new_school')))

Q有助于构建not equal条件,而F有助于引用其他模型字段。

答案 1 :(得分:1)

如果你想少量导入一件事,也可以在没有Q对象的情况下完成。

from django.db.models import F

Student.objects.exclude(old_school=F('new_school'))

在我的测试中,它在后端生成了相同的MySQL。