РЕДАКТИРОВАТЬ: Оказывается, моя форма не была проверена.Я добавил print (formset.errors) в качестве еще одного в моем представлении, которое показало, что у меня не было обязательного поля не заполнено.
Я пытаюсь вручную визуализировать поля formset в шаблоне, но поля не являютсясохраняется, когда я отправляю.
Мой метод работает для другого набора форм, основанного на другой модели, и, насколько я могу судить, я не сделал ничего по-другому.Я перепробовал ряд изменений, но проблема в шаблоне {{form.id}};когда я изменяю его на {{form}}, я могу сохранить некоторые поля.
Как уже упоминалось, эта же настройка работает для другой модели / набора форм;Когда я вносю изменения в поле и сохраняю, страница обновляется, и модель отображается как обновленная.Приведенный ниже код предназначен для неработающей модели / набора форм.
models.py
class Call(models.Model):
name = models.CharField(max_length=200, null=True, blank=True)
customer_number = models.CharField(max_length=200, null=True, blank=True)
tracking_source = models.CharField(max_length=200, null=True, blank=True)
tracking_number = models.CharField(max_length=200, null=True,
qualified_offer = models.BooleanField(default=False)
recorded_date = models.DateTimeField(default=timezone.now)
def publish(self):
self.recorded_date = timezone.now()
self.save()
def t_number(self):
return self.tracking_number[-4:]
def __str__(self):
return str(self.name)
forms.py
class CallForm(forms.ModelForm):
class Meta:
model = Call
fields = ('name', 'customer_number', 'tracking_source', 'qualified_offer', 'recorded_date')
CallFormSet = modelformset_factory(Call, fields=('name', 'customer_number', 'tracking_source', 'recorded_date', 'qualified_offer'))
view.py
def call_list(request):
if request.method == 'GET':
formset = CallFormSet(queryset=Call.objects.all())
elif request.method == "POST":
formset = CallFormSet(request.POST)
if formset.is_valid():
for form in formset:
if form.cleaned_data.get('name'):
form.save()
return redirect('call_list')
return render(request, 'webapp/call_list.html', {'formset': formset})
call_list.html
{% extends 'webapp/base.html' %}
{% block content %}
<form class="form-horizontal" method="POST" action="">
<table style="width:100%" border="1">
<tr>
<th>Name</th>
<th>Qualified Offer</th>
</tr>
{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{{ form.id }}
<tr>
<td>
<label>{{form.name}}</label></td>
<td>
<label>{{form.qualified_offer}}</label>
{% if form.qualified_offer.value %}
<label>True</label>
{% else %}
<label>False</label>
{% endif %}
</td>
</tr>
{% endfor %}
</table>
<div class="row spacer">
<div class="col-4 offset-2">
<button type="submit" class="btn btn-block btn-primary">Save</button>
</div>
</div>
</form>
{% endblock %}
При использовании приведенного выше кода страница обновляется, но модель не изменяется.Опять же, если я отображаю набор форм с {{form}} вместо {{form.id}}, он сохраняет, но я не могу вручную визуализировать поля.