尽管表中有数据,但不会过滤Queryset?

时间:2015-01-14 18:02:44

标签: python django django-queryset

这些是我的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。

1 个答案:

答案 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)
    #.....