这些是我的Models.py
中的内容class InstituteType(models.Model):
institute_type_id = models.AutoField(primary_key=True)
institute_type_name = models.CharField(max_length = 50)
institute_type_description = models.TextField(max_length = 300)
class InstituteMasters(models.Model):
institute_id = models.AutoField(primary_key=True)
institute_name = models.CharField(max_length=100)
institute_institute_type = models.ForeignKey(InstituteType,verbose_name="Institute Type")
institute_district = models.ForeignKey(Districts, verbose_name = "District")
institute_vdc_municipality = models.ForeignKey(VdcMunis,null=True,blank=True,verbose_name="VDC/Municipality")
#.....
class InstituteInfos(models.Model):
institute_info_id = models.OneToOneField(InstituteMasters,primary_key=True,verbose_name="Name of Institute",null=False)
vision = models.TextField(max_length=500, blank=True)
mission = models.TextField(max_length=500, blank=True)
goal = models.TextField(max_length=500, blank=True)
#......
表中有3行与模型InstituteTypes有关。
institute_type_id; institute_type_name; institute_type_description
1;构成; SOME_TEXT
2; TECS; SOME_TEXT
3;附属; SOME_TEXT
InstituteMasters表中有很多行包含所有1,2,3个InstituteTypes
的ID但有趣的是!在python manage.py shell中
>>> xx = InstituteInfos.objects.filter(institute_info_id__institute_institute_type__institute_type_id = 1)
>>> xx
返回对象
>>> xx = InstituteInfos.objects.filter(institute_info_id__institute_institute_type__institute_type_id = 2)
>>> xx
返回[]
为什么我不能过滤其InstituteMaster的字段inistitute_institute_type设置为2的InstituteInfos?类型1和3的代码过滤器相同。如果我从InstituteMasters过滤,则返回所有1,2,3。
答案 0 :(得分:0)
您的设计存在许多问题。我能给你的最强烈的建议是阅读Django文档和教程,并以这种方式做你的模型。你这样做的方式是为了获得更多的额外工作。
我怀疑你遇到的特殊问题是你的institute_info_id字段作为主键和外键执行双重任务。这不是一个不可能的设计,但IMO是一个非常脆弱的设计。
请考虑一些简化以便于阅读。如果你的模特看起来更像这样,那不是很好吗?
class InstituteType(models.Model):
name = models.CharField(max_length=50)
description = models.TextField(max_length=300)
class InstituteMasters(models.Model):
name = models.CharField(max_length=100)
institute_type = models.ForeignKey(InstituteType)
#.....