我有两个看起来像这样的模型:
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')
。如何在不进行原始查询的情况下进行此类查询?如果不可能,那么为了进行这样的查询,改变表的最佳方法是什么?
答案 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字段,在本示例中也是主键,为每个表自动生成,除非另有说明)