2016-06-04 8 views
0

Я новичок в Django, и создаю сайт RSVP для обработки нескольких событий и отслеживания гостей для этих событий. У меня есть модель для Гость, для Событие, а также промежуточная модель для GuestEvent. Я хотел бы страницу к петле через каждый GuestEvent для Гостя и позвольте мне обновить посещающих, взрослых и детей поля в GuestEvent. Мне никогда не понадобится создавать или удалять эти поля через интерфейс.
В настоящее время я пытаюсь использовать средство UpdateView на основе классов, но могу легко переключиться на другое представление. Я попытался использовать django-betterforms и django-extra-views, но не имел никакого счастья ни с одним из них. Я также сделал несколько попыток последовать за учебниками для форм и встроенных форм без успеха. Мои модели выглядят следующим образом:Django: Как создать представление для обновления нескольких записей в промежуточной модели с отношением Many-to-Many-through?

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) 

Что бы быть лучшим способом, чтобы получить эти промежуточные записи в какой-то точки зрения обновления?

ответ

1

Я думаю, что у меня это в основном работает сейчас с Django-Extra-Views. мой взгляд выглядит следующим образом:

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 ] 

И мой шаблон выглядит следующим образом:

<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>