【问题标题】:django adding fields to model formdjango 将字段添加到模型表单
【发布时间】:2013-06-26 15:33:52
【问题描述】:

以下是我的模型

class OrgStaff(BaseModel):
    user = models.OneToOneField(User)
    member_type = models.BooleanField(help_text="1. Read/Write 0. Read Only")
    task = models.ForeignKey(ToDos, null=True, blank=True)
    org = models.ForeignKey(Org)
    # TODO Add possible activities

    def __unicode__(self):
        return self.user.username

下面是表格文件

class AddStaffForm(ModelForm):

    class Meta:
        model = OrgStaff
        exclude = (
            'task',
            'org'
            )

这就是我处理视图的方式

if request.POST and form.is_valid():
    form.save()
    ret_url = reverse("some_view", kwargs={
            'var':var,})
    return redirect(ret_url)
return render(request, "form.html", {"form":form})

此表单将呈现一个下拉列表,其中将显示数据库中的所有用户,以及一个单选框。

但实际上,我想创建表单,以便添加新用户(名字、姓氏、用户名、电子邮件和密码),然后添加 abvoe AddStaffForm 中的其余字段。

所以问题基本上归结为将用户表单字段添加到addstaffform。 然后将它们处理成视图。

是否可行,还是我必须手动完成?

可以扩展上面的模型表单,以便我可以先填写一个用户详细信息,然后给他分配一个类型吗?

请告诉我,谢谢。

【问题讨论】:

  • 如果你的类型是member_type,那么不,任何其他型号,不。你必须为此做一些javascript。像这样的东西:jsfiddle.net/VSRKu
  • 已更新,我的基本问题是将用户(名字、姓氏、电子邮件、用户名、密码等)的字段添加到上述模型表单中,并能够在单个视图中自动处理数据。它创建了 OrgStaff,它基本上是一个用户。

标签: django django-forms


【解决方案1】:

使用两个单独的表单 - UserForm,由 models.UserAddStaffForm 创建,但排除 AddStaffForm 中的“用户”字段。两者都只使用一个提交按钮。

所以你的模板看起来像:

<form method="post" action="/path/to/wherever">
    {{ user_form }}
    {{ add_staff_form }}
    <button>Submit</button>
</form>

然后,当用户提交表单时,按以下顺序独立处理每个表单:

  1. 先处理用户表单,将表单创建的user实例保存到数据库中。如果user_form.is_valid()True,则只需执行user = user_form.save()

  2. 接下来,处理AddStaffForm,但传递commit=False(即staff = add_staff_form.save(commit=False),因为它还没有包含user字段的值。使用staff.user = user然后@提供用户值987654335@

提供人员表单中的所有其他字段(即add_staff_form.is_valid() 否则为True,这将导致创建一个写入数据库的新staff 实例。

希望这会有所帮助。 :)

【讨论】:

猜你喜欢
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 2018-11-01
  • 2018-05-25
  • 1970-01-01
  • 2012-02-08
  • 2018-08-03
相关资源
最近更新 更多