【问题标题】:Django ModelForm with dynamic model init kwargs带有动态模型初始化 kwargs 的 Django ModelForm
【发布时间】:2012-06-24 10:41:11
【问题描述】:

我有一个带有__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()

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

【问题讨论】:

  • 我用更多背景信息更新了我的问题

标签: python django django-models django-forms


【解决方案1】:

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

【讨论】:

  • 表单的参数是如何传递给模型初始化的?
  • form = ArticleForm(instance=article) 但是看看docs.djangoproject.com/en/dev/topics/forms/modelforms你不会浪费时间的。
  • 目前我有:form = ArticleForm(request.POST, request.FILES) - 我如何将它与您预先初始化实例的方法结合起来?
  • form = ArticleForm(request.POST, request.FILES, instance=Image(overwrite=True))
猜你喜欢
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 2018-01-11
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 2013-02-27
相关资源
最近更新 更多