【发布时间】:2014-08-19 07:18:21
【问题描述】:
我有两个看起来像这样的模型:
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')。如何在不进行原始查询的情况下进行此类查询?如果不可能,为了进行这样的查询,更改表的最佳方法是什么?
【问题讨论】:
-
你为什么不在这里使用外键?
person_id应该是People的外键,对吧? -
需要注意的是,在 Django 中拥有
ForeignKey对象不需要数据库级外键即可工作。因此,即使您的数据库不允许更改,您也可以通过添加person = models.ForeignKey(People, blank=True, null=True)轻松完成这项工作 -
说什么?我不知道。这从根本上改变了这种情况。
-
@Wolph:如果您提供您的评论作为答案,我会接受。
-
@trevorDashDash 添加到 Wolph 答案中,您可以放心地省略
id字段定义,因为 Django 会自动添加它(它是 Python 的保留字),如果需要,您可以指定使用db_column属性的字段的 db 列名称。
标签: django django-queryset django-orm django-1.6