2016-05-12 16 views
0

ほとんど同じ質問をしているので、たくさんの質問がありますが、その中心にはそれぞれ異なる問題があるようです。そのことを念頭に置いて、ここ数年の質問を私の唯一の問題に対する解決策を見つけ出すことなく梳かせました。私は私の目よりも経験豊かな目のペアが必要だと思う。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場合は、あなたのユーザーモデルを対話しているフォームを設計していることを考えると

+0

テンプレートでは、 '{{form.as_p}} 'を使用しますが、対話的シェル' form.as_p()'では – slackmart

+0

@slackmartありがとうございます。私は質問のシェルコードセクションを更新しました – Nez

+0

さて、あなたは 'forms.Form'の代わりに' forms.ModelForm'を使いたいと思います。 ModelFormクラスを使用すると、メタクラスを使用してターゲットモデル(ユーザーなど)をオーバーライドすることができます。また、必要なフィールドを持つタプルを指定する必要があります。フィールドはユーザーフィールドと一致する必要があります。 – slackmart

答えて

2

は、それはあなたのために動作します。

+0

これは、この特定のケースで私が探している答えのようです。それはまだ私の他のフォームとの問題を修正していませんが、私はあなたが何かについては尋ねていなかったものを修正するとは思わなかった:)ありがとう、Rajesh。 – Nez

+0

Nezをお手伝いします! –

関連する問題