我想在一种形式中使用两种模型。模型有很多种关系,最好的解决方案是什么?我尝试了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)
答案 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)