>我有两种学生和家长模型
学生 models.py:
class StudentInfo(models.Model):
admissionNumber = models.BigIntegerField(primary_key=True,default=0)
firstName = models.CharField(max_length=20)
lastName = models.CharField(max_length=20)
fullName = models.CharField(max_length=50)
gender = models.CharField(max_length=20)
dob = models.DateField(null=True)
classSection = models.CharField(max_length=20)
父 models.py
class ParentInfo(models.Model):
student = models.OneToOneField(StudentInfo,primary_key=True, on_delete=models.CASCADE)
fatherName = models.CharField(max_length=20)
motherName = models.CharField(max_length=20)
我有一个表格,可以通过他们的父亲姓名搜索学生。
所以,我想要的是过滤那些父亲的名字包含"某个名字"的学生。
我试过这个,但它导致父信息的查询集:
parentInfo = ParentInfo.objects.all()
studentsInfo = parentInfo.filter(parent__fName = fName).select_related('student')
你应该以相反的方式过滤,比如:
StudentInfo.objects.filter(parentinfo__fatherName='name of father')
因此,您在此处获得StudentInfo
s 的QuerySet
,其中包含零个、一个或多个StudentInfo
,其中有一个相关的ParentInfo
对象,其中fatherName
字段位于,在本例中为'Name of father'
。
注意:最好以相反的顺序实现
ForeignKey
,以便多个学生可以引用同一个ParentInfo
对象。现在,ParentInfo
对象可以只引用一个StudentInfo
。如果有父母(兄弟姐妹(相同的学生,则在数据库中引入数据重复。
# You can use contains attribute on the field of model and your query can be like this
student = models.ParentInfo.objects.values('student__firstName', 'student__lastName').filter(fatherName__contains='your value')
print(student[0]['student__firstName'])
print(student[0]['student__lastName'])