Как мне обновить только одно поле в экземпляре с помощью 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.
Кто-нибудь знает, как этим управлять? Я бы сделал все проверки вручную и обновил вручную, но в модели такой длинный список полей ...
Я знаю, что очень опаздываю стороне, но могли Вы создавать функцию фабрики для формы.
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)