如何解决Django forms.ModelForm POST 更新前更改对象
通过标准的 HTML POST 表单,我可以使用以下代码成功更新现有记录,但情况是我需要在将表单数据保存到数据库之前更改一个数据字段。在 Django 网站上,他们说创建一个新的表单实例并更改字段,但无论出于何种原因,字段数据都不会在 save() 操作中更改。
class ProvisioningDetails(View):
def post(self,request,provisioning_ptr_id,terminal_id,site_id):
form = ProvisioningForm(request.POST)
if form.is_valid():
a = Provisioning.objects.get(provisioning_ptr_id=provisioning_ptr_id)
f = ProvisioningForm(request.POST,instance=a)
f.str1 = "some new data"
f.save()
return redirect(
"provisionings_show_view",site_id,provisioning_ptr_id
)
class ProvisioningForm(forms.ModelForm):
class Meta:
model = Provisioning
fields = [
"id","fixedip","str1","str2","str3","ip",]
def clean(self,):
cleaned_data = super(ProvisioningForm,self).clean()
我也试过这个,它确实改变了表单中的数据,但没有改变数据库中的数据:
class ProvisioningDetails(View):
def post(self,site_id):
form = ProvisioningForm(request.POST)
if form.is_valid():
a = Provisioning.objects.get(provisioning_ptr_id=provisioning_ptr_id)
new = ProvisioningForm(request.POST)
new.str1 = "some new data"
f = ProvisioningForm(new,instance=a)
f.save()
return redirect(
"provisionings_show_view",provisioning_ptr_id
)
任何人都知道如何将 str1 = "some new data" 保存在数据库中
解决方法
如果您想用新数据更改数据库中的一个字段,您可以先执行 a.str1 = "new data"
,然后再执行 a.save()
。
否则,如果您想更改请求有效负载数据然后保存,您可以使用 Provisioning.objects.create('your fields here')
和 .save()
无论哪种方式,我认为您最好使用序列化程序:
https://www.django-rest-framework.org/api-guide/serializers/
,所以解决方案很简单
post = request.POST.copy() post.update({"str1": "一些新文本"})
a = Provisioning.objects.get(provisioning_ptr_id=provisioning_ptr_id)
f = ProvisioningForm(post,instance=a) f.save()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。