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')并得到模型.*不是自我中的对象.
我以前用getattr遇到过这种情况.模型内省是解决方案.
如果您知道字段名称,最好的方法是在对象的_meta部分使用一个方法(哦,可怕!).
object_b2._meta.get_field_by_name('a')[0]
Run Code Online (Sandbox Code Playgroud)
最后的[0]是因为该方法实际上在元组中返回了许多其他有用且有趣的信息.但是如果你只是想要这个领域,那就是这样做的方法.
如果您不知道字段的名称,那么在不提供代码的情况下,可以迭代_meta.fields并找到field.rel.to您正在寻找的模型.
祝好运!
| 归档时间: |
|
| 查看次数: |
2141 次 |
| 最近记录: |