我可以让模型知道它的ModelForm吗?

问题描述:

我有一个标准的模型和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来创建泛型外键,所以我的视图代码不知道模型在静态上下文中是什么类。

这不是一个不可能的循环引用。只有在引用它们的代码运行时才会查找名称。

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