2011-01-24 6 views
2

На сайте Джанго этот пример кода Дано:Джанго - ModelForm наследство

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

Мое понимание этого является то, что есть ModelForm называется EnhancedArticleForm (или ArticleForm и EnhancedArticleForm), и что это должно исключить поле тела из форма, когда она отображается. Мой код выглядит так:

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

Я не хочу, чтобы пользователь мог изменить свое имя пользователя, очевидно. Но с этим кодом на месте все это делает поле имени пользователя последним полем для отображения. На самом деле это не исключает. Мне что-то не хватает?

Edit:

Видимо это из-за ошибки в Джанго. Я пытаюсь перезаписать init так, но форма не отображается. Я думаю, это потому, что я, возможно, сделал это неправильно:

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

ответ

1

Это на самом деле ошибка в Django:

http://code.djangoproject.com/ticket/8620 (см комментарий в билете дальше для вашей ситуации)

К сожалению, это похоже, что он не видел никаких действий в течение года.

Один из способов этого - переопределить метод __init__ и просто удалить это поле из self.fields.

+0

Интересные вещи. В JPC вы переопределили 'username' в вашем' UserForm'? –

+0

Да, потому что мне нужно было изменить его поведение – JPC

+0

Я попытался переопределить метод __init__, но теперь форма не будет отображаться. Я отредактировал мой код, чтобы показать это – JPC

Смежные вопросы