@rumak

Django. Как правильно использовать formset?

Передо мной встала задача в том, чтобы вывести форму, в которой должны построчно находиться два поля, в одном из которых я вношу название средства связи (telegram, viber и т.д.), а в другом данные, по которым можно найти человека в том или ином средстве. При этом, должна быть возможность удалять и добавлять строки с этими самыми полями. Вот, что я уже успел сделать, опираясь на официальную документацию:

models.py
class Extra(models.Model):
    extra = models.CharField(max_length=100)

class ExtraContact(models.Model):
    claim = models.ForeignKey(Extra)
    text = models.CharField(max_length=255)


forms.py
class ExtraContactForm(ModelForm):
    class Meta:
        model = ExtraContact
        exclude = ()

ExtraContactFormset = inlineformset_factory(Extra, ExtraContact, form=ExtraContactForm, extra=1)


views.py
def edit_contacts(request, pk):
    extra = get_object_or_404(Extra, pk=pk)

    extra1 = ExtraContactFormset(request.POST, instance=extra)
    if request.method == 'POST':
        if extra1.is_valid():
            extra = extra1.save(commit=False)
            extra.save()
            return redirect('job:list_contacts', pk=extra.pk)
    else:
        extra1 = ExtraContactFormset(instance=extra)

    return render(request, 'job/contacts_form.html', {
        'extra1': extra1,
    })


list_contacts.html
{% extends 'job/base.html' %}

{% block content %}
        <h1>Контакты:</h1>
        <p>{{ extra }}</p>
        <a class="btn btn-default" href="{% url 'job:edit_contacts' pk=contact.pk %}"><span class="glyphicon glyphicon-pencil">Изменить</span></a>
{% endblock %}


contacts_form.html
{% extends 'job/base.html' %}
{% load staticfiles %}

{% block content %}
    {% if message %}
        <p>{{ message }}</p>
    {% endif %}
    <h1>Редактирование информации о контактах</h1>
        <div class="forms">
            <div class="form2">
                <h2>Extra</h2>
                <form method="POST" class="edit-contacts">{% csrf_token %}
                    {{ extra1.management_form }}
                    {{ extra1.as_p }}
                    <button type="submit" class="save btn btn-default">Сохранить</button>
                </form>
            </div>
        </div>
{% endblock %}


Сейчас при открытии страницы list_contacts.html выскакивает ошибка 'ModelBase' object is not iterable, а при открытии contacts_form.html Page not found.
  • Вопрос задан
  • 1529 просмотров
Решения вопроса 1
dimonchik2013
@dimonchik2013
non progredi est regredi
начни с примеров отсюда
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы