如何在Django视图中获取特定字段的外键值

时间:2014-11-18 03:57:49

标签: python django

我在models.py中定义了两个模型:

class model1(models.Model):
    name = models.CharField(max_length=100, unique=True)
    desc = models.CharField(max_length=1000, blank=True, null=True)

    def __unicode__(self):
        return u'ID: %s, name - %s, description - %s' % (str(self.pk), self.name, self.desc)

class model2(models.Model):
    description = models.CharField(max_length=500, blank=True, null=True)
    repo_id = models.ForeignKey(model1, to_field='id', db_column="repo_id", null=False)
    content = models.TextField(blank=True)

    def __unicode__(self):
        return u'ID: %s, rpt_repo_id - %s, created_date - %s' % (str(self.pk), str(self.repo_id.pk), self.created_date)

我想从model2查询从model1获取名称,其中model1的id(pk)是model2的rpt_repo_id的值。以下查询在这里不起作用:

saved_reports = models.model2.objects.all()

虽然{{ repo_id.name }}在html中运行良好。

3 个答案:

答案 0 :(得分:4)

您在视图中使用相同的技术,就像在模板中一样:

saved_reports = model2.objects.all()
for report in saved_reports:
    print('ID: {} Name: {}'.format(report.repo_id.pk, report.repo_id.name))

如果您知道model1对象的id,并希望使用它来获取model2对象:

model2.objects.filter(repo_id__pk=1)

Django自动为外键创建reverse relationships。这意味着如果您有一个model1对象,即使您只在model2对象中定义了外键,也可以获取其相关的model2对象:

model1.objects.get(pk=1).model2_set.all()  # Fetch me all model2 for this model1

答案 1 :(得分:1)

model2()中没有字段'name',它位于相关表model1()

saved_reports = model2.objects.all()
for r in saved_reports:
    print r.repo_id.name

答案 2 :(得分:0)

str(self.repo_id.pk)更改为str(self.repo_id.id)