如何在Django中连接这两个模型?

时间:2014-08-19 07:18:22

标签: django django-queryset django-orm django-1.6

我有两个看起来像这样的模型:

class People(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=125, blank=True)
    age = models.IntegerField(blank=True)

class Income(models.Model):
    id = models.IntegerField(primary_key=True)
    person_id = models.IntegerField(blank=True, null=True)
    income = models.IntegerField(blank=True, null=True)

我希望能够在一个查询中获取任意数量的人及其相关收入。但由于这里没有外键,我不能People.objects.filter(age=40).select_related('income')。如何在不进行原始查询的情况下进行此类查询?如果不可能,那么为了进行这样的查询,改变表的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

Django希望ForeignKey个对象只有名称yourname_id(尽管即使它是可覆盖的)。由于Django还支持没有真正外键支持的数据库,因此外键支持的每一位都由Django本身而不是数据库处理,因此不需要数据库外键。除了要求数据库一致性(有某些竞争条件,这样可以方便)。

但是,在大多数情况下,这将在数据库中没有任何外键的情况下工作(请注意,Django隐式添加了id列):

class People(models.Model):
    name = models.CharField(max_length=125, blank=True)
    age = models.IntegerField(blank=True)

class Income(models.Model):
    person = models.ForeignKey(People, blank=True, null=True)
    income = models.IntegerField(blank=True, null=True)

答案 1 :(得分:0)

class People(models.Model):
    #add your field here.

class Income(models.Model):
    person = models.ForeignKey(People, blank=True, null=True)
    #add your income field here (Integer field)....

这将创建一个表(在您的数据库中),其中收入将与人们相关。默认情况下,此外键是User表的自动生成的id字段(默认为id字段,在本示例中也是主键,为每个表自动生成,除非另有说明)