ほとんど同じ質問をしているので、たくさんの質問がありますが、その中心にはそれぞれ異なる問題があるようです。そのことを念頭に置いて、ここ数年の質問を私の唯一の問題に対する解決策を見つけ出すことなく梳かせました。私は私の目よりも経験豊かな目のペアが必要だと思う。Djangoフォームは表示またはシェルでレンダリングされません
プロファイル情報編集ページでフォームをレンダリングしようとしています。このフォームは、メインのauth.UserとOneToOneで接続されたプロファイルモデルの2つのモデルから描画されます。問題は、フォームがHTMLでレンダリングされないだけでなく、manage.py shell
プロンプトに人生の兆候を示さないことです。まず、フォーム自体を表示してから、プロンプトの出力を表示します。シンプルさのために尋ねられない限り、私は現時点でそれらを排除しているので、私は私の見解を示すつもりはありません。
forms.py:
from django import forms
from django.contrib.auth.models import User
from .models import People, Pick # this is actually for a later forms, which don't work either
class ProfileForm(forms.Form):
class Meta:
model = User
fields = ['people__usr_img', 'email', 'password', 'people__middle_name', 'people__gender', 'people__preference',]
そして、私のシェル出力:
$ > python manage.py shell
...Python meta stuff...
>>> from apps.catch.forms import ProfileForm
>>> ProfileForm()
<ProfileForm bound=False, valid=Unknown, fields=()>
>>> form = ProfileForm()
>>> form.as_p()
''
>>> for field in form:
... print("Field")
...
>>>
何、この問題の核心だがfields=()
宣言であるように私には思えます。私はフィールドをMeta
に明示的に定義しているので、なぜ私はここで何も得られないのですか?私は他の形でも同じ問題を抱えていると言わざるを得ない。もしユーザーforms.ModelForm代わりのforms.Form場合は、あなたのユーザーモデルを対話しているフォームを設計していることを考えると
テンプレートでは、 '{{form.as_p}} 'を使用しますが、対話的シェル' form.as_p()'では – slackmart
@slackmartありがとうございます。私は質問のシェルコードセクションを更新しました – Nez
さて、あなたは 'forms.Form'の代わりに' forms.ModelForm'を使いたいと思います。 ModelFormクラスを使用すると、メタクラスを使用してターゲットモデル(ユーザーなど)をオーバーライドすることができます。また、必要なフィールドを持つタプルを指定する必要があります。フィールドはユーザーフィールドと一致する必要があります。 – slackmart