我有一个__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()
现在我希望能够创建覆盖旧图像的表单和使用默认行为的表单。实现这一目标的最佳方法是什么?
答案 0 :(得分:3)
不,这根本不是它的工作原理,这与你的自定义init无关。你不要在Meta内部调用内容。在您的情况下,在视图中初始化表单时传递参数。