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

die*_*us9 3 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)
Run Code Online (Sandbox Code Playgroud)

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

related_manager = getattr(object_c,'a') 
Run Code Online (Sandbox Code Playgroud)

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

object_b2 = getattr(object_b,'a')
Run Code Online (Sandbox Code Playgroud)

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

Gab*_*ley 7

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

如果您知道字段名称,最好的方法是在对象的_meta部分使用一个方法(哦,可怕!).

object_b2._meta.get_field_by_name('a')[0]
Run Code Online (Sandbox Code Playgroud)

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

如果您不知道字段的名称,那么在不提供代码的情况下,可以迭代_meta.fields并找到field.rel.to您正在寻找的模型.

祝好运!