Django:如何创建视图以更新具有多对多关系的中间模型上的多条记录?
Django: How do I create a view to update multiple records on an intermediate model with a Many-to-Many-through relationship?
我是 Django 的初学者,正在创建一个 RSVP 站点来处理多个事件并跟踪这些事件的来宾。我有一个 Guest、Event 的模型和一个 GuestEvent 的中间模型。我想要一个页面为 GuestEvent 循环遍历每个 GuestEvent 并允许我更新 attending 、成人 和 儿童 字段 GuestEvent。我永远不需要通过前端创建或删除这些字段。
我目前正在尝试使用基于 class 的 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)
在某种更新视图中获取这些中间记录的最佳方法是什么?
我想我现在主要使用 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>
我是 Django 的初学者,正在创建一个 RSVP 站点来处理多个事件并跟踪这些事件的来宾。我有一个 Guest、Event 的模型和一个 GuestEvent 的中间模型。我想要一个页面为 GuestEvent 循环遍历每个 GuestEvent 并允许我更新 attending 、成人 和 儿童 字段 GuestEvent。我永远不需要通过前端创建或删除这些字段。
我目前正在尝试使用基于 class 的 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)
在某种更新视图中获取这些中间记录的最佳方法是什么?
我想我现在主要使用 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>