Django Чередование UserProfile с профилем в Admin - PullRequest
0 голосов
/ 20 сентября 2010

У меня есть профиль пользователя, который в данный момент отображается в Admin через Stacked Inline.Однако, поскольку у меня есть поля, такие как last_name_prefix и last_name_suffix (для иностранных имен, таких как Piet van Dijk, чтобы покрыть правильную сортировку по фамилии), я хотел бы иметь возможность чередовать поля профиля пользователя с обычными изменениями пользовательских полей.Поэтому в интерфейсе администратора изменения пользователя это будет выглядеть следующим образом:

Имя:
Префикс фамилии:
Фамилия
Суффикс фамилии:

Я пыталсяэто решение: http://groups.google.com/group/django-users/browse_thread/thread/bf7f2a0576e4afd1/5e3c1e98c0c2a5b1. Но это только создало дополнительные поля в пользовательской форме, которые на самом деле не приходили из профиля пользователя (они оставались пустыми, даже если они должны получать значения из профиля пользователя).

Может ли кто-нибудь объяснить мне, если это можно сделать и как?Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 03 июля 2013

Этот вопрос был решен новой версией Django 1.5: https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#auth-custom-user.

0 голосов
/ 20 сентября 2010

Я уверен, что вам нужно перезаписать обычного администратора пользователя.

На самом деле я бы создал специальный forms.ModelForm для UserProfile с именем, скажем, UserProfileAdminForm, который также включал поля из модели User. Затем вы зарегистрируете UserProfile для администратора, а функция save для UserProfileAdminForm будет захватывать пользовательские поля и либо создавать, либо обновлять запись User (это оставлено в качестве упражнения для OP).

Подробнее

Когда я говорю добавить дополнительные поля в форму, я имею в виду добавить их вручную:

class UserProfileAdminForm(forms.ModelForm):
    username = forms.CharField(...)
    email = forms.EmailField(...)
    first_name = ...
    last_name = ...

    def __init__(self, *args, **kwargs):
        super(UserProfileAdminForm, self).__init__(*args, **kwargs)
        profile = kwargs.get('instance', None)
        if profile and profile.user:
            self.user = profile.user
            self.fields['username'].initial = self.user.username
            self.fields['last_name'].initial = ...
            ...

    class Meta:
        model = UserProfile
...