gpt4 book ai didi

python - Django 使用 ModelForm 更新一个字段

转载 作者:太空狗 更新时间:2023-10-29 17:41:36 28 4
gpt4 key购买 nike

如果 POST 请求只有一个字段作为参数,我如何使用 ModelForm 更新实例中的一个字段? ModelField 尝试用 None 覆盖 POST 请求中未传递的字段,导致数据丢失。

我有一个带有 +25 个字段的模型 say

class C(models.Model):
a = models.CharField(max_length=128)
b = models.CharField(max_length=128)
...
x = models.IntegerField()

我有一个桌面应用程序,它执行 POST 请求,以便通过 views.py 中公开的 api 方法编辑 C 的实例

在 api 方法中,我使用 ModelForm 来验证字段,如下所示:

form = CModelForm(request.POST, instance=c_instance)
if form.is_valid():
form.save()

当执行 save() 时,django 要么提示其他字段不能为 null,要么(如果所有字段都是可选的)用 None 覆盖它们。

有人知道如何管理它吗?我会手动进行所有检查并手动更新,但该模型的字段列表非常长...

最佳答案

明白了。我所做的是用实例中的值更新 request.POST 字典——这样所有未更改的字段都会自动出现。这将做到:

from django.forms.models import model_to_dict
from copy import copy

def UPOST(post, obj):
'''Updates request's POST dictionary with values from object, for update purposes'''
post = copy(post)
for k,v in model_to_dict(obj).iteritems():
if k not in post: post[k] = v
return post

然后你就可以:

form = CModelForm(UPOST(request.POST,c_instance),instance=c_instance)

关于python - Django 使用 ModelForm 更新一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8216353/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com