Django Forms,在Meta类中有多个"模型"?

Soa*_*ask 7 django django-forms django-admin django-registration

我们可以在表单的"元类"部分中定义多个模型吗?

这是我的例子:

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 ???
Run Code Online (Sandbox Code Playgroud)

roa*_*oam 7

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

# 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>
Run Code Online (Sandbox Code Playgroud)

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


Ala*_*air 5

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

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

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

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