如何在不加载相应项的情况下读取ForeignKey的主键?

时间:2011-08-22 09:20:11

标签: django models

我有2个Django模型:

class A(models.Model):
    uniq_name = models.CharField(max_length=30,primary_key=True)
    info1 = models.CharField(max_length=30)     
    info2 = models.CharField(max_length=30)

class B(models.Model):
    a = models.ForeignKey(A)
    info3 = models.CharField(max_length=30)     
    info4 = models.CharField(max_length=30)

如果我这样做:

b = B.objects.get(id = n), it generates one database request.

如果我这样做

print b.a.pk : it generate another request.

是否可以在不生成其他请求或使用'select_related()'的情况下访问b.a主键(我只需要此信息,而不是info1或info2)?

我可以做:

print b.__dict__['a_id']

它有效,但在我看来非常难看:你有更好的方式吗?

3 个答案:

答案 0 :(得分:7)

你不需要通过dict:b.a_id工作正常。

答案 1 :(得分:0)

答案 2 :(得分:0)

如果您想动态地做到这一点(就像我一样):

related_field = 'a'
related_id = getattr(obj, f'{related_field}_{A._meta.pk.name}')