Django: Как создать представление для обновления нескольких записей в промежуточной модели с отношением "многие ко многим через"?
Я новичок в Django и создаю сайт RSVP для обработки нескольких событий и отслеживания гостей на этих событиях. У меня есть модель для гостя, для события и промежуточная модель для гостя. Я хотел бы, чтобы страница проходила по каждому гостевому событию для гостя и позволяла мне обновлять поля посещаемости, взрослых и детей в гостевом событии. Мне никогда не понадобится создавать или удалять эти поля через интерфейс.
В настоящее время я пытаюсь использовать основанный на классе UpdateView, но могу легко переключиться на другое представление. Я пытался использовать django-betterforms и django-extra-views, но мне тоже не повезло. Я также сделал несколько попыток следовать учебникам для наборов форм и встроенных наборов форм, но безуспешно. Мои модели выглядят так:
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>