将两个模型表单渲染为一个

时间:2014-03-08 07:09:19

标签: django django-models django-forms django-templates

我有两个模型定义为:

class Event(models.Model):
    event_id=models.IntegerField(primary_key=True)
    OS_CHOICE=(('Win 2003','windows 2003'),
        ('Win 2008','Windows 2008'),
        ('Win XP','Windows XP'),
        ('Win VISTA','Win VISTA'),
        ('Win 2007','Windows 2007'),
        )
    windows=models.CharField(max_length=10,choices=OS_CHOICE,default='Win 2003')

    def __unicode__(self):
        return " %s, event_id :%s" \
            % (self.windows, self.event_id)
    class Meta:
        db_table= 'event'
        verbose_name_plural='events'


class Eventgroups(models.Model):
    event=models.ManyToManyField(Event)
    group_name=models.CharField(max_length=100)

    def __unicode__(self):
        return "%s,  %s" \
            % (self.group_name, self.event)
    class Meta:
        db_table= 'eventgroup'
        verbose_name_plural='eventgroups'

我想从这两个模型中渲染两个模型形式。 我想要一种方式来渲染这个表单,就好像它是一个表单。 有兴趣了解如何实现这一目标的人? 问候。

1 个答案:

答案 0 :(得分:0)

如果您只是需要它们看起来像一个表格,您可以这样做:

在views.py中,您需要按如下方式实例化表单变量:

event_form = EventForm(prefix='event')
event_groups_form = EventForm(prefix='event_groups')

然后你可以按如下方式渲染表格:

<form action="" method="post">
    {% for field in event_form %}
        <div class="fieldWrapper">
            {{ field.errors }}
            {{ field.label_tag }} {{ field }}
        </div>
    {% endfor %}
    {% for field in event_groups_form %}
        <div class="fieldWrapper">
            {{ field.errors }}
            {{ field.label_tag }} {{ field }}
        </div>
    {% endfor %}
    <p><input type="submit" value="Send message" /></p>
</form>

然后在您的视图中,您可以将数据读入表单,如下所示:

event_form = EventForm(request.POST, prefix='event')
event_groups_form = EventForm(request.POST, prefix='event_groups')

注意:如果您目前没有形式的表单中存在冲突的字段,那么前缀很重要,但将来也可以。