Django ModelForm与动态模型init kwargs

时间:2012-06-24 10:41:11

标签: python django django-models django-forms

我有一个__init__方法的模型:

class Foo(models.Model):
    name = models.CharField(max_length=50)

    def __init__(self, *args, **kwargs):
        self.bar = kwargs.pop('bar', False)
        super(Foo, self).__init__(*args, **kwargs)
        if self.bar:
            # do something
            pass

现在,我需要创建一个特定的ModelForm:

class FooForm(ModelForm):

    class Meta:
        model = Foo(bar='something')
        fields = ('name',)

这显然不起作用:

TypeError: 'Foo' object is not callable

有什么方法可以克服这个问题吗?

更新

有关我想要实现的内容的更多信息:我有一个带有ImageField的Image模型。它具有不同的存储方法,具体取决于使用它的形式。

模特:

class Image(models.Model):
    image = models.ImageField(upload_to=imageUploadTo)
    user = models.ForeignKey('auth.User')

    def __init__(self, *args, **kwargs):
        self.overwrite = kwargs.pop('overwrite', False)
        super(Image, self).__init__(*args, **kwargs)
        if self.overwrite:
            self.image.storage = OverwriteStorage()

现在我希望能够创建覆盖旧图像的表单和使用默认行为的表单。实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

不,这根本不是它的工作原理,这与你的自定义init无关。你不要在Meta内部调用内容。在您的情况下,在视图中初始化表单时传递参数。