2016-06-04 6 views
0

Ich bin ein Anfänger in Django und erstelle eine RSVP-Website, um mehrere Ereignisse zu verwalten und die Gäste auf diese Ereignisse aufmerksam zu machen. Ich habe ein Modell für Gast, für Ereignis, und ein Zwischenmodell für GuestEvent. Ich möchte eine Seite eine Schleife durch jede GuestEvent für eine Guest und erlauben Sie mir die Teilnahme, Erwachsene Felder in GuestEvent und Kinder zu aktualisieren. Ich werde diese Felder niemals über das Frontend erstellen oder löschen müssen.
Ich versuche derzeit, die klassenbasierte UpdateView zu verwenden, könnte aber problemlos zu einer anderen Ansicht wechseln. Ich habe versucht, django-betterforms und django-extra-views zu verwenden, hatte aber bei beiden kein Glück. Ich habe auch ein paar Versuche unternommen, Tutorials für Formsets und Inline-Formsets ohne Erfolg zu folgen. Meine Modelle wie folgt aussehen:
Django: Wie erstelle ich eine Ansicht, um mehrere Datensätze in einem Zwischenmodell mit einer Viele-zu-Viele-Verbindung-Beziehung zu aktualisieren?

class Event(models.Model): 
    name = models.CharField(max_length=200) 
    description = models.TextField(null=True, blank=True) 
    date = models.DateTimeField('event date') 
    guests = models.ManyToManyField('Guest', through='GuestEvent') 

class Guest(models.Model): 
    first_name = models.CharField(max_length=45, null=True, blank=True) 
    last_name = models.CharField(max_length=45, null=True, blank=True) 
    events = models.ManyToManyField('Event', through='GuestEvent') 

class GuestEvent(models.Model): 
    guest = models.ForeignKey('Guest', related_name='guests') 
    event = models.ForeignKey('Event', related_name='events') 
    attending = models.NullBooleanField() 
    adults = models.IntegerField(null=True, blank=True) 
    children = models.IntegerField(null=True, blank=True) 

Was ist der beste Weg wäre, diese Zwischen Aufzeichnungen in irgendeiner Art von Update-Ansicht zu bekommen?

Antwort

1

Ich denke, ich habe das meistens jetzt mit Django-Extra-Views arbeiten. Meine Ansicht sieht wie folgt aus:

class GuestEventInline(InlineFormSet): 
    model = GuestEvent 
    fields = [ 'attending', 'adults', 'children' ] 
    extra = 0 
    can_delete=False 

class Invite2View(UpdateWithInlinesView): 
    template_name = "weddings/invite2.html" 
    model = Guest 
    inlines = [ GuestEventInline ] 

Und meine Vorlage sieht wie folgt aus:

<form action="" method="post" class="form-horizontal"> 
    {% csrf_token %} 
    {{ form }}   
    {% for formset in inlines %} 
     {{ formset.id }} 
     {{ formset.management_form}} 
     {%for subform in formset%} 
      <h4>{{ subform.instance.event }}</h4></a> 
      {{ subform.as_p }} 
     {% endfor %} 
    {% endfor %} 
    {% buttons submit='Save' %}{% endbuttons %} 
</form>