我有这个:
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')并得到模型。*不是自我中的对象。
答案 0 :(得分:7)
我以前用getattr遇到过这种情况。模型内省是解决方案。
如果您知道字段名称,最好的方法是在对象的_meta
部分使用方法( ooooh,吓人!)。
object_b2._meta.get_field_by_name('a')[0]
最后的[0]是因为该方法实际上在元组中返回了许多其他有用且有趣的信息。但如果你只是想要这个领域,那就是这样做的。
如果您不知道该字段的名称,那么在不提供代码的情况下执行此操作的方法是迭代_meta.fields
并找到field.rel.to
是您正在寻找的模型的那个
答案 1 :(得分:-1)
ForeignKey
只会导致单一模型。如果您在访问该属性时需要获取管理员,请使用ManyToMany
与ForeignKey
同时启用unique
的{{1}}。