다음과 같은 코드를 생각해 내에서 필드의 이름을 얻을 :장고 - 그 init 함수
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의 related_name이 "MyAppName.MyModelA.modelAField"가되기를 원합니다.
난 그냥 kwarg로 전달에 대해 생각했습니다
field_name = kwargs.pop("related_name",None)
if not field_name:
raise AttributeError("you have to supply a related name!")
하지만 조금 더 좋은 뭔가를 바라고 있어요 :
modelAField = MyManyToManyField("MyModelB",related_name="modelAField")
다음은 초기화에서 사용.
감사합니다.
그건 대단한 것입니다. 그것을 사랑해! –
이것은 훌륭해 보이지만, contrib_to_class가 _before_ __init __()이라면, 내가 설정 한 어떤 속성도 여전히 사용할 수 없습니까? self._fieldName = contrib_name_class에 전달 된 field_name 인수를 설정하려고했습니다. 하지만 self._fieldName에 __init __()에서 접근 할 때, 이는 지속적으로 contrib_to_class에 설정 한 것이 아니라 기본값을 제공합니다. – trubliphone
거의 1 년 후,이 응용 프로그램을 다시 작성하고 동일한 문제가 발생했습니다.Ian이 정확하다는 것을 알았습니다. 다음과 같이 contrib_to_class의 "related_name"인수를 수정해야했습니다 :'self.rel.related_name = "some_string"+ name' – trubliphone