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

时间:2011-04-18 11:56:33

标签: django django-models model django-forms

我有一个标准的Model和ModelForm设置。我希望能够从我的模型中返回ModelForm对象。这涉及一个不可能的循环参考。我认为,因为Django允许将外键模型表示为字符串,所以也许可以做类似的事情。目前我正在这样做:

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来创建通用外键,所以我的视图代码不知道模型在静态上下文中的类。

1 个答案:

答案 0 :(得分:2)

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

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

    def get_form(self):
        return ThingForm(self)


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