【问题标题】:Form Problems - Setting Initial Value表单问题 - 设置初始值
【发布时间】:2019-06-19 06:06:55
【问题描述】:

我正在尝试在表单上设置字段的初始值。该字段不是模型的一部分,但是当我尝试将其设置为一个值时,该字段为空白。根据我的研究,这可能是因为表单是“绑定”的,这对我来说有些意义,但在这种情况下,该字段不是模型的一部分。

我的表格:

#Form for editing profile
class CatForm(forms.ModelForm):
    pictureid = forms.CharField()

    class Meta:
        model = Cat
        fields = ['name']

    def __init__(self, *args, **kwargs):
        picid = kwargs.pop("pictureid")
        print(picid)
        super(CatForm, self).__init__(*args, **kwargs)
        self.fields['pictureid'] = forms.CharField(initial=picid, required=False)

型号:

class Cat(models.Model):
    name = models.CharField(max_length=34,null=False)

从视图上看是这样称呼的:

catform = CatForm(request.POST, pictureid=instance.id)

我希望它将字段设置为初始属性的值,但事实并非如此。我试过直接添加字符串来测试它,但没有设置。

这似乎对我有用:

class CatForm(forms.ModelForm):

    class Meta:
        model = Cat
        fields = ['name']

    def __init__(self, *args, **kwargs):
        picid = kwargs.pop("pictureid")
        super(CatForm, self).__init__(*args, **kwargs)
        self.fields['pictureid'] = forms.CharField(initial=picid)

我还需要在启动表单时从调用中删除“request.POST”。

【问题讨论】:

  • 我需要从视图中提供更多信息,但我认为这是因为在显示的调用中我传递了“request.POST”。我认为这里不需要,因为我只是在初始化表单。然后从 init 方法设置字段是否有效?

标签: python django django-forms


【解决方案1】:

如果你想在GET请求中渲染pictureid,那么你可以这样尝试:

catform = CatForm(initial={'pictureid': instance.id})

对于 GET 请求,您不需要覆盖__init__ 方法。

但是,如果你想在 POST 请求中使用Catform,在其他地方使用pictureid 的值(比如说在保存方法中),那么你需要覆盖@ 987654327@ 方法在这里。

class CatForm(forms.ModelForm):
    pictureid = forms.CharField()

    class Meta:
        model = Cat
        fields = ['name']

    def __init__(self, *args, **kwargs):
        picid = kwargs.pop("pictureid")
        print(picid)
        super(CatForm, self).__init__(*args, **kwargs)
        self.pictureid = picid

    def save(self, *args, **kwargs):
        print(self.pictureid)  # if you want to use it in save method
        return super().save(*args, **kwargs)

【讨论】:

  • 谢谢,我会试试看的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 2010-10-23
  • 2022-01-20
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
相关资源
最近更新 更多