Вставка значений в поля ModelForm во время __init__ - PullRequest
0 голосов
/ 05 ноября 2010

Я хочу добавить поля first_name, last_name и email на страницу администратора UserProfile. Таким образом, вы можете изменить все данные пользователя изнутри администратора UserProfile вместо того, чтобы переходить на другую страницу для изменения адреса электронной почты и некоторых других полей.

Вот как выглядит моя пользовательская форма:

class CustomProfileForm(forms.ModelForm):
    first_name = forms.CharField(max_length=30)
    last_name = forms.CharField(max_length=30)
    email = forms.EmailField()

    class Meta:
        model = UserProfile

    def __init__(self, *a, **k):
        super(CustomProfileForm, self).__init__(*a, **k)
        self.user_instance = None
        if self.instance:
            self.user_instance = self.instance.user

    def clean_first_name(self):
        self.user_instance.first_name = self.cleaned_data['first_name']

    def clean_first_name(self):
        self.user_instance.last_name = self.cleaned_data['laset_name']

    def clean(self):
        self.user_instance.save()
        return self.cleaned_data

class UserProfileAdmin(admin.ModelAdmin):
    form = CustomProfileForm

Я не знаю, что делать, чтобы завершить это. Мне нужно предоставить user_instance подробности в соответствующий класс формы.

1 Ответ

2 голосов
/ 05 ноября 2010

Для установки начальных значений в методе init вы можете использовать словарь полей.

def __init__(self, *a, **k):
    # < snip >
    self.fields[ 'email' ].initial = self.user_instance.email
    # ... and any others
...