使用“ __in”语法时会出现一些问题,它应该是100条记录,但最终返回值小于100
class Teacher(model.Model):
name = model.CharField()
class Student(model.Model):
teacher = models.ForeignKey(Teacher,on_delete=models.CASCADE)
这是模型,但这不是我遇到的问题,这种情况比它复杂,我试图说明要点;
我尝试重现该问题,它看起来像:
我想让所有学生获得他们在[1,2,3,4]中的老师ID
所以我尝试使用:
teachers = Teacher.objects.filter(in__in=[1,2,3,4])
students = Student.objcets.filter(teacher_id__in=teachers)
它遇到了一些问题,数据不完整,少于预期
我们知道,最好使用:
teachers_list = Teacher.objects.filter(in__in=[1,2,3,4]).values("id",flat=True)
students = Student.objcets.filter(teacher_id__in=list(teacher_list))
当我使用第一句话时,它确实会引起问题;但我再也不能复发了,所以我想知道它是否会引起问题 使用“ __in = queryset”而不是“ in__in = list”时
对不起,我的英语很差,我已尽力描述了这个问题,请期待您的回答,非常感谢!
答案 0 :(得分:0)
使用
__in
语法时会遇到一些问题,它应该是100条记录,但最终返回值小于100
您使用的是 ,而不是id__in
teacher__in
。尽管如此,进行这样的过滤不是一个好主意,您可以使用两个连续的下划线(__
)来“浏览”一个关系,例如:
students = Student.objects.filter(teacher__id__in=[1,2,3,4])
或更简单:
students = Student.objects.filter(teacher_id__in=[1,2,3,4])