我正在尝试在表单上设置字段的初始值。该字段不是模型的一部分,但是当我尝试将其设置为一个值时,该字段为空白。根据我的研究,可能是因为表单是“绑定”的,这对我来说很有意义,但是在这种情况下,该字段不是模型的一部分。
我的表单:
#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”。
答案 0 :(得分:0)
如果您要在GET
请求中呈现pictureid,则可以尝试如下操作:
catform = CatForm(initial={'pictureid': instance.id})
对于 GET 请求,您不需要需要覆盖__init__
方法。
但是,如果您想在 POST 请求中使用Catform
,在其他地方使用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)