8

habe ich 3 Modelle:Mit django-dynamic-Formset mit CreateWithInlinesView von django-extra-Ansichten - mehrere Formularsätze

class Client(models.Model): 
    first_name = models.CharField(max_length=20) 
    last_name = models.CharField(max_length=40) 

class Phone(models.Model): 
    number = models.CharField(max_length=10) 
    client = models.ForeignKey(Client) 

class ClientEmail(models.Model): 
    client = models.ForeignKey(Client) 
    address = models.EmailField(verbose_name='Email') 

eine Form und zwei Inline-Formularsätze:

class ClientForm(ModelForm): 
    class Meta: 
     model = Client 


class PhoneFormSet(InlineFormSet): 
    model = Phone 
    extra = 1 


class EmailFormSet(InlineFormSet): 
    model = ClientEmail 
    extra = 1 

Ansicht:

class ClientCreateView(LoginRequiredMixin, CreateWithInlinesView): 
    model = Client 
    inlines = [PhoneFormSet, EmailFormSet,] 

und Arbeitsvorlage:

{% extends 'base.html' %} 
{% block extra_head_script %} 
<script src="{{ STATIC_URL }}js/jquery.formset.js"></script> 
{% endblock %} 

{% block content %} 
<form action="." method="post"> 
    {% csrf_token %} 
    <table> 
     {{ form.as_table }} 
    </table> 
    {% for formset in inlines %} 
     <div id="{{ formset.prefix }}"> 
     {% for subform in formset.forms %} 
      <table> 
      {{ subform.as_table }} 
      </table> 
     {% endfor %} 
     {{ formset.management_form }} 
     </div> 
    {% endfor %} 
    <input type="submit" value="Add client" class="submit"/> 
</form> 
{% endblock %} 

Ich habe gerade angefangen mit ClassBasedViews und kann nicht herausfinden, wie django-dynamic-formset js mit django-extra-views in meiner Vorlage zu verwenden.

Antwort

4

Oh mein Kopf ... ich es herausgefunden:

{% block extra_footer_script %} 
<script type="text/javascript"> 
     $(function() { 
      {% for formset in inlines %} 
      $('div#FormSet{{ formset.prefix }}').formset({ 
       prefix: '{{ formset.prefix }}', 
       formCssClass: 'dynamic-formset{{ forloop.counter }}' 
      }); 
      {% endfor %} 
     }) 
    </script> 
{% endblock %} 

Wenn Sie irgendwelche Fehler finden Sie sie mir zeigen. Schätze auch bessere Ideen.

Für diejenigen, die diese nutzen wollen -. Ja, es mit einer beliebigen Anzahl von Formsets

+0

Linie 5 sollte '$ ('div # {{formset.prefix}}') formset ({', da Sie arbeiten sollten habe nicht 'FormSet' in der div's ID der ursprünglichen Frage (oder du könntest' FormSet' zu Zeile 13 in der Vorlage hinzufügen) – mislavcimpersak

+0

kannst du mir bitte sagen, wie du ein neues Unterformular auf der Client Seite hinzugefügt hast ??? Ich möchte hinzufügen neues Unterformular nach Bedarf auf der Clientseite. –