2011-01-24 11 views
2

ジャンゴ - このサンプルコードが指定されているDjangoのウェブサイト上のModelForm継承

>>> class RestrictedArticleForm(EnhancedArticleForm): 
...  class Meta(ArticleForm.Meta): 
...   exclude = ('body',) 

本の私の理解では、EnhancedArticleForm(またはするArticleFormとEnhancedArticleForm)と呼ばれるのModelFormがあることであり、これはからボディフィールドを除外するべきですフォームがレンダリングされるときのフォーム。私のコードは次のようになります。私は、ユーザーが明らかに自分のユーザー名を変更することができるようにしたくない

class EditUserForm(UserForm): 
    class Meta(UserForm.Meta): 
     exclude = ('username',) 

。しかし、このコードを使用すると、ユーザー名フィールドが最後に表示されるフィールドになります。それは実際にそれを排除するものではありません。私は明白な何かを欠いていますか

編集:

どうやらこれは、ジャンゴのバグのためです。私はのように上書きしようとしていますが、フォームは表示されません。私は多分これ間違っていたからだと思う:

class EditUserForm(UserForm): 
    def __init__(self,instance): 
     UserForm.__init__(self,instance) 
     del self.fields['username'] 

答えて

1

これは、実際にはDjangoのバグです:

http://code.djangoproject.com/ticket/8620(状況にさらにダウンチケットにコメントを参照してください)

残念ながら、それを1年以上も何の行動も見ていないようだ。

これを回避する方法の1つは、フォーム__init__をオーバーライドして、そのフィールドをself.fieldsから削除することです。

+0

興味深いもの。 JPCはあなたの 'UserForm'で' username'をオーバーライドしましたか? –

+0

はい、その動作の一部を変更する必要があったので、 – JPC

+0

フォーム__init__メソッドをオーバーライドしようとしましたが、フォームが表示されなくなりました。私はこのコードを編集しました – JPC

関連する問題