我正在编写一个 Django 应用程序,需要使用 AJAX 请求更新模型,该请求仅包含模型字段的子集作为键。所以如果我有模型
class TheModel(models.Model):
a = models.CharField(max_length=16)
b = models.IntegerField()
c = models.TextField()
d = models.ManyToManyField(AnotherModel)
然后我可以收到类似的请求
id=7&a=Hello
id=7&a=Test&b=123
id=13&b=14&c=Description&d=6&d=10
也就是说,我总是会得到 ID 字段,但会得到其他字段的任何子集。
我在 Django 1.5 中找不到“好”的方法:起初我尝试过
instance = get_instance_or_404(request["id"])
data = django.forms.models.model_to_dict(instance)
data.update(request.POST)
form = TheModelForm(data, instance=instance)
if form.is_valid():
form.save()
...
else:
...
但这似乎不适用于 m2m 领域,而且 model_to_dict 对我来说感觉非常难看。所以我也做了
instance = get_instance_or_404(request["id"])
for k in TheModel._meta.fields:
if k in request:
setattr(instance, k, request[k])
try:
instance.full_clean()
except ValidationError as e:
...
instance.save()
但我也不完全了解如何在这里处理 m2m 字段。
在 Django 中有没有一种惯用的方法来做到这一点?在此先感谢您的帮助。