11

フォームの「メタクラス」部分で複数のモデルを定義できますか?

これが私の例です:

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クラスで複数のモデルを定義することはできません。

モデルごとにモデルフォームを作成し、 prefix引数<form>を使用して同じhtmlタグに複数のフォームを配置できます。

次に、ビューで、保存する前に各モデルフォームが有効であることを確認できます。

django contrib.authアプリにはUserCreationFormソースを表示)が付属していることに注意してください。独自のフォームを作成する代わりに、おそらくそれを再利用できます。

于 2012-06-19T13:18:12.757 に答える
0

form.pyでモデルを定義します

form1#1番目のモデルを使用

form2#2番目のモデルを使用

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 に答える