Как создать новую форму во встроенном наборе форм, нажав на ссылку - PullRequest
0 голосов
/ 23 ноября 2018

Я создал внутреннее отношение между Reader и Book моделями.Я успешно импортировал набор форм в свой шаблон, но не могу создать новую форму Книги, щелкнув ссылку, связанную с моим атрибутом addtext в приведенном ниже сценарии. Другими словами, для одного Читателя я хочу иметь возможность создавать более одной формы Книги, щелкая ссылку.

   <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script src="{% static 'jquery.formset.js' %}"></script>
    <script type="text/javascript">
      $('table.book tr.formset_row').formset({
          addText: 'Add new Book',
          deleteText: 'Delete',
          prefix: 'reader_book_set',
          animateForms: true
      });
    </script>

Весь шаблон такой:

{% extends 'base.html' %}
{% load bootstrap3 %}
{% load static %}
<!-- Latest compiled and minified JavaScript -->


{% block content %}

<div class="col-md-12 text-center">
<h2>Create / Edit Reader </h2>
</div>

<hr>

<form class="well" method="post" action="">
{% csrf_token %}
{% bootstrap_form form %}

<table class="table book">
  {{ formset.management_form }}

  {% for form in formset.forms %}
      {% if forloop.first %}
          <thead>
          <tr>
              {% for field in form.visible_fields %}
                  <th>{{ field.label|capfirst }}</th>
              {% endfor %}
          </tr>
          </thead>
      {% endif %}
      <tr class="{% cycle row1 row2 %} formset_row">
          {% for field in form.visible_fields %}
              <td>
                  {# Include the hidden fields in the form #}
                  {% if forloop.first %}
                      {% for hidden in form.hidden_fields %}
                          {{ hidden }}
                      {% endfor %}
                  {% endif %}
                  {{ field.errors.as_ul }}
                  {{ field }}
              </td>
          {% endfor %}
      </tr>
  {% endfor %}
</table>


<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="{% static 'jquery.formset.js' %}"></script>
<script type="text/javascript">
  $('table.book tr.formset_row').formset({
      addText: 'Add new Book',
      deleteText: 'Delete',
      prefix: 'reader_book_set',
      animateForms: true
  });
</script>

    {% buttons %}
      <button type="submit" class="btn btn-primary">
         Submit
      </button>
    {% endbuttons %}
</form>
<hr>

{{ form.media }}
<link rel="stylesheet" type="text/css" href="{% static 'admin/css/forms.css' %}"/>
<link rel="stylesheet" type="text/css" href="{% static 'admin/css/base.css' %}"/>
<link rel="stylesheet" type="text/css" href="{% static 'admin/css/widgets.css' %}"/>
<script type="text/javascript" src="/admin/jsi18n/"></script>
<script type="text/javascript" src="/static/admin/js/core.js"></script>
<script type="text/javascript" src="/static/admin/js/admin/RelatedObjectLookups.js"></script>
<script type="text/javascript" src="/static/admin/js/vendor/jquery/jquery.min.js"></script>
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>
<script type="text/javascript" src="/static/admin/js/actions.min.js"></script>
<script type="text/javascript" src="/static/admin/js/calendar.js"></script>
<script type="text/javascript" src="/static/admin/js/admin/DateTimeShortcuts.js"></script>

{% endblock %}

Вот мой взгляд:

class ReaderBookCreateView(LoginRequiredMixin, CreateView):
    model = Reader
    fields = '__all__'
    template_name='test/test.html'

    def get_context_data(self, **kwargs):
        data = super(ReaderBookCreateView, self).get_context_data(**kwargs)
        if self.request.POST:
            data['formset'] = BookFormSet(self.request.POST)#bound the formset with data
        else:
            data['formset'] = BookFormSet()#empty formset
        return data

    def form_valid(self, form):
        context = self.get_context_data()
        formset = context['formset']
        with transaction.atomic():
            self.object = form.save()

            if formset.is_valid():
                formset.instance = self.object
                formset.save()
        return super(ReaderBookCreateView, self).form_valid(form)

    def get_success_url(self, **kwargs):
        return reverse('client_list')

Вот как это выглядит.Я хотел бы иметь ссылку Добавить новую книгу над кнопкой отправки для создания новой формы книги для текущего читателя.enter image description here

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 23 ноября 2018

В этих ситуациях, как обычно, возникла проблема с JavaScript.Я решаю это.Мой проект не смог найти путь для файла jquery.formset.js .Всегда используйте F12 при попытке отладки JavaScript.

enter image description here

...