Джанго Формсет не сохраняется - PullRequest
0 голосов
/ 30 мая 2019

РЕДАКТИРОВАТЬ: Оказывается, моя форма не была проверена.Я добавил 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}}, он сохраняет, но я не могу вручную визуализировать поля.

1 Ответ

0 голосов
/ 31 мая 2019

Оказывается, моя форма не проверялась.Я добавил print (formset.errors) в качестве еще одного в моем представлении, которое показало, что у меня есть обязательное поле не заполнено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...