初期データが提供されたフォームセットがあります。これは、「グループ」と「要求」の 2 つのフィールドを含む他のモデルから複製されたデータです。
初期データが提供されると、フォームセットのフォームは保存されず、フォームをデータで少し変更するときにのみ保存されます。
初期データが提供されない場合、フォームは保存されます。
フォームセットに初期データを追加すると、フォームセット データをデータベースに保存できなくなるのはなぜですか?
これは、get_context_data 辞書に存在する私のフォームセットです。
initial = ProcedureActionGroup.objects.filter(procedure__id=self.kwargs.get('pk', None))
initial_values = initial.values('group', 'requested')
print initial_values
initial_count = initial.count()
ActionGroupFormset = inlineformset_factory(self.model, TaskGroup, extra=initial_count,
form=TaskActionGroupForm,
can_delete=False,
)
data['formset'] = ActionGroupFormset(self.request.POST or None, initial=initial_values,
**self.get_formset_kwargs())
これは、すべてのデータを保存する私の form_valid メソッドです
def form_valid(self, form):
context = self.get_context_data()
forms = []
forms.append(form.is_valid())
if self.get_procedure_obj():
formset = context['formset']
forms.append(formset.is_valid())
if all(forms):
self.object = form.save(commit=False)
form.save()
if self.get_procedure_obj():
formset = formset.save(commit=False)
for obj in formset:
obj.task = self.object
obj.save()
self.object.extract_users()
return HttpResponseRedirect(self.object.get_absolute_url())
モデル:
class TaskGroup(models.Model):
task = models.ForeignKey(Task, null=True, blank=False)
group = models.ForeignKey(ActionGroup, null=True, blank=True)
requested = models.PositiveIntegerField(u'Requested', null=True, blank=True)
フォーム テンプレート:
<form method="post" action="" class="span6 offset2 form form-horizontal">
{% crispy form%}
{{formset.management_form}}
{% if formset %}
<div>
<fieldset>
<table class="table table-striped">
{% for form in formset%}
<tr>
{% for field in form %}
<td> {{field}} </td>
{% endfor %}
</tr>
{% endfor %}
</table>
</fieldset>
</div>
{% endif %}
<div class="form-actions">
<button class="btn btn-primary btn-large" type="submit">
Save
</button>
</div>
</form>