Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 一种形式的多个模型_Python_Django_Forms_Model - Fatal编程技术网

Python 一种形式的多个模型

Python 一种形式的多个模型,python,django,forms,model,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) clas

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

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

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

class EventTimeForm(forms.ModelForm):
    class Meta:
        fields = ('start_time',)
请注意,
事件
字段已被忽略,因为我们希望将事件时间对象链接到我们正在创建的新事件

在您的视图中,您需要将这两个表单传递到模板上下文。在使用多个表单时,使用前缀是一个好主意,它可以防止字段名在
请求中发生冲突

event_form = EventForm(prefix="event")
event_time_form = EventTimeForm(prefix="eventtime")
在模板中,可以在同一个表单标记中包含多个表单

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

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

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

class EventTimeForm(forms.ModelForm):
    class Meta:
        fields = ('start_time',)
请注意,
事件
字段已被忽略,因为我们希望将事件时间对象链接到我们正在创建的新事件

在您的视图中,您需要将这两个表单传递到模板上下文。在使用多个表单时,使用前缀是一个好主意,它可以防止字段名在
请求中发生冲突

event_form = EventForm(prefix="event")
event_time_form = EventTimeForm(prefix="eventtime")
在模板中,可以在同一个表单标记中包含多个表单

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

前缀很好,但有一个陷阱:如果您想在表单有效时访问字段值,请从名称字段中删除前缀;例如,
if event\u form.is\u valid():title=event\u form.cleaned\u data['title']
前缀非常好,但有一个陷阱:如果您想在表单有效时访问字段值,请从name字段中删除前缀;例如,
if event\u form.is\u valid():title=event\u form.cleaned\u data['title']