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

Python 如何在django模型中排除相等列?,python,django,django-models,django-queryset,Python,Django,Django Models,Django Queryset,我有一个模型,其中有两个外场指向同一个模型: class Student(models.Model): old_school = model.ForeignField(school) new_school = model.ForeignField(school) 我想找一个老同学新学校。我试过这些: Student.objects.all().exlude(old_school = new_school) Student.objects.all().exlude(self.ol

我有一个模型,其中有两个外场指向同一个模型:

class Student(models.Model):
    old_school = model.ForeignField(school)
    new_school = model.ForeignField(school)
我想找一个老同学新学校。我试过这些:

Student.objects.all().exlude(old_school = new_school)
Student.objects.all().exlude(self.old_school = self.new_school)
但它们都不起作用。模特儿经理似乎不能指新学校。有什么方法可以做这样的查询吗?或者我必须手动检查python代码中的not equal:

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

您可以通过使用和来实现这一点:


Q
有助于建立
not equal
条件,而
F
有助于引用另一个模型字段。

您可以通过使用和来实现这一点:


Q
有助于建立
not equal
条件,而
F
有助于引用另一个模型字段。

如果您想少导入一个对象,也可以在不使用Q对象的情况下完成此操作

from django.db.models import F

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

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

如果你想少导入一个东西,也可以在没有Q对象的情况下完成

from django.db.models import F

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

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

为什么要这样做?哦,我真正的问题是关于产品库存位置,我想找到返回供应商的产品。我只是简化了原来的问题。你为什么要这样做?哦,我真正的问题是关于产品的库存位置,我想找到退回给供应商的产品。我只是简化了原来的问题。