混淆了Django中的ForeignKey模型关系

时间:2014-07-07 15:26:01

标签: python django

我使用MySQL,我有两个模型:

class District(models.Model):
    name = models.CharField(max_length=50)

    def __unicode__(self):
        return self.name

class School(models.Model):
    name = models.CharField(max_length=100)
    school_id = models.IntegerField(default=0)
    district = models.ForeignKey(District) 

当我尝试查询我的学校模型时:

schools = School.objects.filter(district = 'Norfolk')

它告诉我我需要使用int() - 这使我相信它想要区的主键id,而不是区的名称。在我的管理员中,学校的区域是字符串" Norfolk",但在Sequel Pro中 - 它列出了district_id,并引用了区域的ID。

我的模特设置错了吗?为什么我不能将学区的名称传递给学校模型?

2 个答案:

答案 0 :(得分:1)

如果要按名称过滤,则应使用

schools = School.objects.filter(district__name = 'Norfolk')

您应该注意到可能有多个带有该名称的区域,因为它不是模型District的关键字(即它不是唯一的)。

答案 1 :(得分:0)

查看Django docs。您应该使用ForeignKey.to_field。默认情况下,使用相关模型的主键。在这种情况下,它将是district_id,您希望它为name