【发布时间】:2012-02-09 21:45:08
【问题描述】:
考虑以下代码:
class MyManyToManyField(models.ManyToManyField):
def __init__(self,*args,**kwargs):
field_name = ?!?
kwargs["related_name"] = "%(app_label)s.%(class)s." + field_name
super(MetadataManyToManyField,self).__init__(*args,**kwargs)
class MyModelA(models.Model):
modelAField = MyManyToManyField("MyModelB")
class MyModelB(models.Model):
pass
有什么方法可以让我从重载的 init 函数中访问字段的名称?我希望 modelAField 的相关名称最终成为“MyAppName.MyModelA.modelAField”。
我考虑过将它作为一个 kwarg 传递:
modelAField = MyManyToManyField("MyModelB",related_name="modelAField")
然后在init中使用它:
field_name = kwargs.pop("related_name",None)
if not field_name:
raise AttributeError("you have to supply a related name!")
但我希望有更好的东西。
谢谢。
【问题讨论】:
标签: django django-models