一种形式的多个模型

时间:2015-11-18 09:57:35

标签: python django forms model

我想在一种形式中使用两种模型。模型有很多种关系,最好的解决方案是什么?我尝试了formset,但是我只看到了一个模型的字段,而不是两个。

我的模特:

class Event(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField(max_length=400)
    location = models.CharField(max_length=100)

class EventTime(models.Model):
    start_time = models.DateTimeField()
    event = models.ManyToManyField(Event)

1 个答案:

答案 0 :(得分:3)

为每个表单定义一个模型表单。

class EventForm(forms.ModelForm):
    class Meta:
        fields = ('title', 'description', 'location')

class EventTimeForm(forms.ModelForm):
    class Meta:
        fields = ('start_time',)

请注意,event字段已被忽略,因为我们希望将事件时间对象链接到我们正在创建的新事件。

在您的视图中,您需要将两个表单都传递给模板上下文。使用多个表单时使用前缀是一个好主意,它可以防止字段名称在request.POST

中发生冲突
event_form = EventForm(prefix="event")
event_time_form = EventTimeForm(prefix="eventtime")

在模板中,您可以在同一表单标记中包含多个表单。

<form method="post">
    {{ event_form }}
    {{ event_time_form }}
</form>

处理POST请求时,请检查两个表单是否有效。保存两个表单后,您可以将事件和事件时间链接在一起。

event_form = EventForm(request.POST, prefix="event")
event_time_form = EventTimeForm(request.POST, prefix="eventtime")

if event_form.is_valid() and event_time_form.is_valid():
    event = event_form.save()
    event_time = event_time_form.save()
    event_time.event.add(event)