python - 表单问题 - 设置初始值
问题描述
我正在尝试在表单上设置字段的初始值。该字段不是模型的一部分,但是当我尝试将其设置为一个值时,该字段为空白。根据我的研究,这可能是因为表单是“绑定”的,这对我来说很有意义,但在这种情况下,该字段不是模型的一部分。
我的表格:
#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”。
解决方案
如果你想在请求中渲染图片ID GET
,那么你可以这样尝试:
catform = CatForm(initial={'pictureid': instance.id})
对于GET请求,您不需要覆盖该__init__
方法。
但是,如果你想使用Catform
in POST请求,使用pictureid
其他地方的值(比如说在 save 方法中),那么你需要在__init__
这里覆盖方法。
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)
推荐阅读
- node.js - 如何在 pm2 中设置子域?
- c# - .net 核心控制器 - 是否将 [FromBody] 属性添加到方法?
- firebase - 编译后 Unity with Firebase 冻结 (AssetDatabase.Refresh)
- python - 只有大小为 1 的数组可以转换为 Python 标量图形 sin
- qt - QScrollEvent 和 QWheelEvent 有什么区别?
- python - 如何在连接到 Raspberry Pi 的显示器上显示 GUI?
- python - 使用 Turtle Not PyGame 的 Python 游戏:错误消息
- excel - 如何将包含变量的字符串写入VBA中的特定单元格?
- instagram - instagram.com/{USER_NAME}/?__a=1 在没有身份验证的情况下不再工作?
- airflow - 找不到放置在 Airflow 中的本地文件 - GCSToLocalFilesystemOperator