Поместите в форму следующую информацию __init__
for field in form.fields:
form.fields[field].required = False
Например:
class MySexyForm(Form):
def __init__(self, *args, **kwargs):
super(MySexyForm, self).__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].required = False
Тогда звоните:
form = MySexyForm(...)
form.save()
Однако вам необходимо убедиться, что ваш метод clean()
может обрабатывать любые пропущенные атрибуты, условно проверяя, существуют ли они в cleaned_data. Например, если проверка другого поля формы основана на customer_id
, но ваша частичная форма не указала его, то customer_id
не будет в cleaned_data.
Если это для формы модели, вы можете проверить, было ли значение в cleaned_data
, и вернуться к instance.field
, если оно отсутствовало, например;
def clean(self):
inst = self.instance
customer_id_new = self.cleaned_data.get('customer_id', None)
customer_id_old = getattr(self.instance, 'customer_id') if inst else None
customer_id = customer_id_new if customer_id_new else customer_id_old
Помните, что значение new value почти наверняка не будет в том же формате, что и старое значение, например, customer_id
может фактически быть RelatedField
на экземпляре модели, но pk int
на данных формы. Опять же, вам нужно будет справиться с этими различиями типов в вашей чистоте.
Это одна из областей, где форм Джанго, к сожалению, не хватает.