Source code for shuup.utils.forms
[docs]
def merged_initial_and_data(form):
data = {}
for name, field in form.fields.iteritems():
data[name] = field.initial
for source in (form.initial, getattr(form, "cleaned_data", {})):
for name, value in source.iteritems():
if value is not None:
data[name] = value
return data
[docs]
def get_effective_form_data(form):
"""
Return 'effective' data for the form, in essence running its validation methods,
but trying to return its state to what it was before the `full_clean`. Not fool-
proof, but what in this universe is.
:type form: BaseForm
:return: data dict
"""
# Stash some attributes
old = [(key, getattr(form, key)) for key in ("_errors", "_changed_data")]
form.full_clean()
data = merged_initial_and_data(form)
for key, value in old: # And unstash
setattr(form, key, value)
return data
[docs]
def fill_model_instance(instance, data):
"""
Fill whatever fields possible in `instance` using the data dict.
:param instance:
:param data:
"""
for field in instance._meta.fields:
if not field.editable or field.name not in data:
continue
field.save_form_data(instance, data[field.name])
return instance