Django将UserProfile与管理员中的配置文件交错

时间:2010-09-20 13:06:14

标签: django admin user-profile

我有一个用户个人资料,目前通过Stacked Inline显示在Admin中。但是因为我有诸如last_name_prefix和last_name_suffix之类的字段(对于Piet van Dijk这样的外来名称来覆盖正确的姓氏排序)我希望能够将用户配置文件字段与正常的更改用户字段交错。因此,在“更改用户”管理界面中,它将显示如下:

名字:
姓氏前缀:
姓氏
姓氏后缀:

我尝试过这个解决方案:http://groups.google.com/group/django-users/browse_thread/thread/bf7f2a0576e4afd1/5e3c1e98c0c2a5b1。但是,这只是在用户表单中创建了实际上并非来自用户配置文件的额外字段(即使他们应该从用户配置文件中获取值,它们也保持空白。)

有人可以向我解释是否可以这样做以及如何做? 非常感谢!

2 个答案:

答案 0 :(得分:0)

我很确定你需要覆盖普通的用户管理员。

我实际要做的是为UserProfile创建一个特殊的forms.ModelForm,比如UserProfileAdminForm,其中包含User模型中的字段。然后,您将为admin注册UserProfile,UserProfileAdminForm的save函数将捕获用户特定的字段,并创建或更新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

答案 1 :(得分:0)

这个问题已经被新的Django 1.5版解决了:https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#auth-custom-user