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