2011-04-18 2 views
2

표준 모델 및 ModelForm 설정이 있습니다. 모델에서 ModelForm 객체를 반환 할 수 있어야합니다. 여기에는 불가능한 순환 참조가 포함됩니다. Django는 외래 키 모델을 문자열로 표현할 수 있으므로 비슷한 것을 할 수 있다고 생각했습니다. 지금 내가하고있는이 :ModelForm에 대한 모델을 만들 수 있습니까?

class Thing(models.Model): 
    stuff = models.TextField() 

    def get_form(self): 
     return getattr(sys.modules[__name__], "ThingForm")(self) 


class ThingForm(ModelForm): 
    class Meta: 
     model = Thing 

그것은 작동합니다. 그러나 나는이 일을하면서 자신과 가족에게 수치심을 갖게한다고 생각합니다. 더 훌륭한 방법이 있어야합니다.

그런데 ContentTypes를 사용하여 일반 외래 키를 만들기 때문에 내보기 코드는 모델이 정적 컨텍스트에 어떤 클래스인지 알지 못하므로이 작업을 수행하고 싶습니다.

답변

2

그건 ... 불가능한 순환 참조가 아닙니다. 이름은 참조하는 코드가 실행될 때만 조회됩니다.

class Thing(models.Model): 
    stuff = models.TextField() 

    def get_form(self): 
     return ThingForm(self) 


class ThingForm(ModelForm): 
    class Meta: 
     model = Thing 
+0

네 말이 맞아. 내 방어에서 나는 그것이 가능하지 않은 모든 종류의 언어로 수년 동안 고통을 겪었습니다. – Joe

+2

파이썬에서는 [반 중력을 가져올 수 있습니다] (http://xkcd.com/353/)를 항상 기억하십시오. –

관련 문제