哪种方式使用django formset

时间:2014-01-29 21:24:17

标签: django django-forms

假设我有Person模型以及Event模型。

事件与人物有ManyToMany的关系

class Event(models.Model):
    canceled_persons = models.ManyToManyField('Person', related_name='canceled')
    confirmed_persons = models.ManyToManyField('Person', related_name='confirmed')
    no_response = models.ManyToManyField('Person', related_name='no_response')

创建活动时,它会向一组选定的人发送一封电子邮件,其中包含用于点击以更新其状态的链接。默认情况下,它们都列在“no_response”中。除了通过电子邮件更新,他们可以打电话,联系人代表可以更新他们的状态。

我的问题是我应该如何设置表单以便一次更新多个表单。我的第一个想法是为每个捐赠者提供一个表单,并在canceled, confirmed, no_response的名称旁边放置单选按钮,在底部有一个保存按钮

我应该使用来自Person的modelformset_factory还是来自Event?或者我是否更容易忽视某些事情?

1 个答案:

答案 0 :(得分:0)

我的设计模型略有不同。 Event模型应包含事件的详细信息。一个单独的课程说“预订”应该处理PersonEvent之间的关系。通过这种方式,您可以更好地管理状态,而无需管理多个“多对多”关系。例如,

class Event(model.Models):
    name = model.CharField(max_length=100)


class Booking(model.Models):
    BOOKING_STATES = (
        ("CAN", "Cancelled"),
        ("CON", "Confrimed"),
        ("NOR", "No Response"),
    )
    event = model.ForeignKey(Event)
    person = model.ForeignKey(Person)
    booking_status = model.CharField(max_length=3, choices=BOOKING_STATES)

这样也可以轻松构建一个formset。