2011-04-18 24 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 2011-04-18 12:06:04

+2

請記住,在Python中,您可以['import antigravity'](http://xkcd.com/353/)。 – 2011-04-18 12:24:37

相關問題