1

私は 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でこれを行う慣用的な方法はありますか? よろしくお願いします。

4

1 に答える 1