Рассмотрим следующий код:
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
Могу ли я получить доступ к имени поля из моей перегруженной функции инициализации? Я хочу, чтобы related_name для 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!")
Но я надеюсь на что-то более приятное.
Спасибо.