如何在Django中获取ForeignKey字段而不是相关对象?

时间:2010-02-11 20:58:53

标签: django django-models

我有这个:

Class A(models.Model):
     name = models.CharField(max_length=50)

Class B(models.Model):
     a = models.ForeignKey(A)

class C(models.Model):
     a = models.ManyToManyField(A)

当我在a的对象中需要属性C时:

related_manager = getattr(object_c,'a') 

这给了我一个ManyRelatedManager,但问题是当我在a的对象中需要属性B时:

object_b2 = getattr(object_b,'a')

这给了我一个B类的对象,我需要知道如果是ForeignKey或ManyToManyField,我的意思是,我需要getattr(某些东西,'some_attribute')并得到模型。*不是自我中的对象。

2 个答案:

答案 0 :(得分:7)

我以前用getattr遇到过这种情况。模型内省是解决方案。

如果您知道字段名称,最好的方法是在对象的_meta部分使用方法( ooooh,吓人!)。

object_b2._meta.get_field_by_name('a')[0]

最后的[0]是因为该方法实际上在元组中返回了许多其他有用且有趣的信息。但如果你只是想要这个领域,那就是这样做的。

如果您不知道该字段的名称,那么在不提供代码的情况下执行此操作的方法是迭代_meta.fields并找到field.rel.to是您正在寻找的模型的那个

祝你好运!

答案 1 :(得分:-1)

ForeignKey只会导致单一模型。如果您在访问该属性时需要获取管理员,请使用ManyToManyForeignKey同时启用unique的{​​{1}}。