Django обновляет одно поле с помощью ModelForm

Как мне обновить только одно поле в экземпляре с помощью ModelForm, если запрос POST имеет только это одно поле в качестве параметра ? ModelField пытается переопределить поля, которые не были переданы в запросе POST, значением None, что приводит к потере данных.

У меня есть модель с +25 полями, например

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

, и у меня есть настольное приложение, которое выполняет запросы POST для редактирования экземпляра C с помощью открытого метода api в views.py

В методе api I Я использую ModelForm для проверки полей следующим образом:

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

При выполнении save () django либо жалуется, что какое-то другое поле не может быть пустым, либо (если все поля необязательные) перезаписывает их значением None.

Кто-нибудь знает, как этим управлять? Я бы сделал все проверки вручную и обновил вручную, но в модели такой длинный список полей ...

12
задан Roman Semko 21 November 2011 в 18:07
поделиться

1 ответ

Я знаю, что очень опаздываю стороне, но могли Вы создавать функцию фабрики для формы.

def model_form_factory(cls, data, *args, **kwargs):
    """ Create a form to validate just the fields passed in the data dictionary.

    e.g. form = form_factory(MyModel, request.POST, ...)

    """


    data = data.copy()
    data.pop('csrfmiddlewaretoken', None)

    class PartialForm(forms.ModelForm):
        class Meta:
            model  = cls
            fields = data.keys()

    return PartialForm(data, *args, **kwargs)
1
ответ дан 2 December 2019 в 06:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: