假设我有这个模型
class Employee(models.Model):
name = models.CharField(max_lenght=25)
class Attendance(models.Model):
employee = ForeignKey(Employee, on_delete=models.CASCADE)
is_present = models.BooleanField()
这是我的实施:
Employee.objects.bulk_create([
Employee(name='Greg'),
Employee(name='John'),
Employee(name='Lesley'),
])
emp1 = Employee.objects.get(name='Greg')
emp1.attendance_set.create(is_present=True)
emp1.attendance_set.create(is_present=True)
emp1.attendance_set.create(is_present=True)
emp2 = Employee.objects.get(name='John')
emp2.attendance_set.create(is_present=True)
emp2.attendance_set.create(is_present=True)
emp2.attendance_set.create(is_present=True)
emp3 = Employee.objects.get(name='Lesley')
emp3.attendance_set.create(is_present=True)
emp3.attendance_set.create(is_present=False)
现在我如何从没有Attendance.is_present=False
的员工级别过滤员工,这将产生Greg和John的独特记录?
我到目前为止尝试了这个,但它包括Lesley
。
Employee.objects.filter(attendance__is_present=True).distinct()
答案 0 :(得分:2)
我能够使用exclude()
过滤正确的查询集首先,如果您有一些需要包含在查询集中的查询所需条件,则可以执行filter()
函数,然后执行exclude()函数,该函数将删除所有记录为{{{ 1}}
attendance__is_present=False
如果除了Employee.objects.filter(
# some criteria..
).exclude(
attendance__is_present=False
).distinct()
之外没有任何标准,您可以直接按 @Piyush S. Wanare 回答。
答案 1 :(得分:1)
使用:
Attendance.objects.filter(is_present=True)
答案 2 :(得分:1)
您可以直接执行此操作:
Employee.objects.exclude(
attendance__is_present=False
).distinct()
答案 3 :(得分:0)
这样的事情应该有效 -
employees = [attendance.employee for attendance in Attendance.objects.filter(is_present = False)]