2009-03-05 11 views
0

奇妙な問題消える:DjangoのForeignKeyのは、フォームとジャンゴで

私はForm.classは次のように定義されている...

class MeetingForm(forms.Form): 
    owner = forms.ModelChoiceField(
      queryset=Profile.objects.all(), 
      widget=forms.HiddenInput()) 
    date = forms.DateTimeField() 
    name = forms.CharField(max_length=30) 
    etc. 

をそして私のような関数を呼び出すことによって、新しいインスタンスを作成しますこれ...

def newMeetingForm(request,profile) : 
    mf = MeetingForm({ 
     'date' : date.today(),   
     }) 
    return mf 

期待どおりに動作します。ただし、会議の「所有者」フィールドは空白です。引数「プロファイルは、」プロファイルオブジェクトである

def newMeetingForm(request,profile) : 
    mf = MeetingForm({ 
     'date' : date.today(), 
     'owner' : profile, 
     }) 
    return mf 

:私は私がやるべきだと思うことは、このようnewMeetingFormにあらかじめ記入所有者フィールドです。

しかし、これを実行すると、フォームはレンダリングされません。

私はテンプレートでこれを使用しています:

{{ form.as_p }} 

しかし、文字通り空の文字列として出てくるように思わnewMeetingFormには、余分な「所有者」のラインと

。私は何らかの理由でそれが静かに失敗していると考えています。おそらく、ModelChoiceFieldは、事前に所有者の値をレンダリングしようとしています。しかし、値はOKです。だから何を探しているのですか?

+0

どうかこれはコミュニティウィキに分類されている理由は何ですか?良い質問のようです。 –

+0

私はコミュニティとしてデフォルトで分類しています...誰でもそれを改善することができます。 – interstar

答えて

3

あなたのコードは大体、正しいと思われます。私は実際にフォームとフォーム作成コードを使用してマシン上に「スタブ」プロジェクトを実行しましたが、成功した結果が得られました(確かに、私はプロファイルモデルがどのように見えるか推測しました)。

レンダリングには影響しませんが、MeetingFormのインスタンスをinitialのデータとしてインスタンス化する必要があります。最初の位置引数として渡すと、djangoはそのデータがPOSTデータであるとみなし、そのためフォームを検証する必要があります。 (あなたがすでにこれを知っていて、問題を提起する目的でショートカッティングするだけの場合は、お詫び申し上げます)。

私はしばしば、djangoのビューが重要なエラーを飲み込むことがあります。テストするにはフォームはDjangoのシェルでそれをやってみてください。

$ python manage.py shell 
>>> from blah.models import Profile 
>>> from blah.forms import MeetingForm 
>>> from datetime import date 
>>> p = Profile.objects.get(id=someid) 
>>> mf = MeetingForm(initial={'date':date.today(), 'owner':p}) 
>>> print mf.as_p() 

この意志の出力形式と、深刻な爆発があった場合、エラーとしても。

また、私はこれが愚かだと知っていますが、私もこのようなことをやっています:-)(余分な目を...など)、あなたは 'フォーム'変数を渡していますか?あなたのテンプレートレンダリングのコンテキストに?変数は 'フォーム'と呼ばれ、 'mf'などではありません。

希望すること

+0

はい...それでした( "初期=")。どうもありがとうございました。しばらくの間苦労している。 – interstar

+0

このコンテキストでの最初の引数の検証についてはわかりませんでした – interstar

+0

Cool!お役に立てて嬉しいです。テンプレートの空の文字列が大好き: –

0

プロファイルの実際のインスタンスをnewMeetingFormに渡してもよろしいですか?

+0

私はかなり確信しています...それは "request.user.get_profile()"から来た – interstar

関連する問題