Django:如何创建一个视图来更新具有ManytoManythrough关系的中间模型上的多个记录?

2024-10-03 23:19:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Django的初学者,正在创建一个RSVP站点来处理多个事件并跟踪这些事件的客人。我有一个客人的模型,事件的模型,以及GuestEvent的中间模型。我想要一个页面来循环浏览每个客人客人并允许我更新GuestEvent中的主治成人儿童字段。我永远不需要通过前端创建或删除这些字段。
我目前正在尝试使用基于类的UpdateView,但是可以很容易地切换到另一个视图。我尝试过使用django betterforms和django extra视图,但都没有任何运气。我还尝试了一些关于表单集和内联表单集的教程,但都没有成功。 我的模型是这样的:

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)

在某种更新视图中获取这些中间记录的最佳方法是什么?在


Tags: name模型event视图truemodelmodels事件
1条回答
网友
1楼 · 发布于 2024-10-03 23:19:42

我想我现在主要使用Django Extra视图来处理这个问题。 我的观点是这样的:

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 ]

我的模板是这样的:

^{pr2}$

相关问题 更多 >