2010-09-20 74 views
0

我有一个用户配置文件,当前显示在管理员通过堆叠内联。然而,因为我有字段,如last_name_prefix和last_name_suffix(外国名称,如Piet van Dijk覆盖按姓氏排序),我希望能够将用户配置文件字段与正常更改用户字段交错。因此,在更改用户管理界面会出现这样的:Django交织用户配置文件和管理中的配置文件

名字:
姓前缀:

姓氏后缀:

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

有人可以向我解释,如果这可以完成和如何? 非常感谢!

回答

0

这个问题已经被新的Django 1.5版本解决了。

0

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

我实际上会做的是为UserProfile创建一个特殊的forms.ModelForm,称为UserProfileAdminForm,其中还包括User模型的字段。然后,您将为管理员注册UserProfile,并且UserProfileAdminForm的功能将捕获用户特定的字段并创建或更新User记录(这是OP的练习)。

更多信息

当我说添加更多的字段的形式,我的意思是手动添加:https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#auth-custom-user

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 
+0

感谢您的回复。 我已经尝试了几种方法,但似乎无法从一种形式的User和UserProfile中获取字段。据我所知这是不可能的。你的意思是你使用'class Meta:model = UserProfile'并手动添加用户字段(这些字段实际上不会连接到用户模型)。 能否请你详细解释一下你将如何做到这一点? – Heyl1 2010-09-21 13:01:01

+0

是的,据我所知,没有办法自动做到这一点。但是手动输入字段,然后使用'initial'来填写表单,再次使用自定义的'save'函数来处理稍后保存用户记录。对于你的具体情况,你可以看看这个:http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/ – 2010-09-21 14:41:47

+0

约旦,再次感谢你的回复。回复晚了非常抱歉。我看了一下链接,并且已经测试过了。不适合我的是设置密码,因为密码创建页面的链接不正确。你必须去实际的用户实例并在那里做(所以用户必须在管理员)。不知道你是否有这方面的经验。我认为解决方案非常简洁,但我对使用user_profile(并在评论中有一些批评)有点犹豫。您的其他建议不太直观,但我想我会使用该链接的解决方案。 – Heyl1 2010-09-29 13:32:38