11

我们可以在 Form 的“元类”部分定义多个模型吗?

这是我的例子:

from django import forms

from django.contrib.auth.models import User , Group

from django.forms import ModelForm

from django.utils.translation import ugettext as _

from profiles.models import Student , Tutor 


class RegistrationForm(ModelForm):
    email           = forms.EmailField(label=_('Email Address:'))
    password        = form.CharField(label=_('Passsword:') , widget = forms.PasswordInput(render_value = False))
    password1       = form.CharField(label=_('Verify Passsword:') , widget = forms.PasswordInput(render_value = False))

    class Meta:
        model = [Student , Tutor] ## IS THIS TRUE ???
4

3 回答 3

10

不,但你不需要。无需实例化和验证单个表单,而是针对您需要支持的每种类型的表单执行此操作。

# Define your model forms like you normally would
class StudentForm(ModelForm):
    ...

class TutorForm(ModelForm):
    ...

class RegistrationForm(Form):
    email = ...
    ...

# Your (simplified) view:
...
context = {
    'student_form': StudentForm(),
    'tutor_form': TutorForm(),
    'registration_form': RegistrationForm()
}
return render(request, 'app/registration.html', context)

# Your template
...
<form action="." method="post">
    {{ student_form }}
    {{ tutor_form }}
    {{ registration_form }}
    <input type="submit" value="Register">
</form>

如果这意味着字段名称在表单中重复,请使用表单前缀对其进行排序。

于 2012-06-19T13:24:16.670 回答
6

不,不可能在 Meta 类中定义多个模型。

您可以为每个模型创建一个模型表单,然后使用前缀参数将多个表单放在同一个 html<form>标记中。

然后在您的视图中,您可以在保存之前检查每个模型表单是否有效。

请注意,django contrib.auth 应用程序带有UserCreationForm查看源代码)。您可能可以重复使用它,而不是编写自己的表单。

于 2012-06-19T13:18:12.757 回答
0

在你的 form.py 中定义你的模型

form1#使用第一个模型

form2#使用第二个模型

现在在 get 方法中编辑你的views.py

args = {

"form1" = form1(),

"form2" = form2()

}

return render(request, "template_name", args)

现在编辑您的模板

<form .....>

form1.as_p

form2.as_p

...

</form>

于 2018-02-06T06:44:01.970 回答