django编辑用户和用户配置文件对象
所以我用django做了一个通用的“账户”页面。我使用了django注册插件,目前有一个(djang标准)用户对象,以及一个UserProfile和UserProfileForm对象 我想这是一个风格或最佳实践的问题。我的计划是“正确的”,还是有“更好的/推荐的/标准的方法”来做到这一点 我计划做的是根据请求创建UserProfile。用户ie:django编辑用户和用户配置文件对象,django,Django,所以我用django做了一个通用的“账户”页面。我使用了django注册插件,目前有一个(djang标准)用户对象,以及一个UserProfile和UserProfileForm对象 我想这是一个风格或最佳实践的问题。我的计划是“正确的”,还是有“更好的/推荐的/标准的方法”来做到这一点 我计划做的是根据请求创建UserProfile。用户ie: form = UserProfileForm(instance=User) (并将该表单发送到视图),在UserProfileForm中: clas
form = UserProfileForm(instance=User)
(并将该表单发送到视图),在UserProfileForm中:
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
def __init__(self,*args,**kwargs):
super(UserProfileForm, self).__init__(*args, **kwargs)
if kwargs.has_key('instance'):
self.user = kwargs['instance']
其中,我的用户配置文件非常类似:
class UserProfile(models.Model):
user = models.OneToOneField(User)
points = models.IntegerField(default=0) #how is the user going with scores?
其中用户属于django.contrib.auth.models
类型
好的!编辑和保存的处理将通过mixin
django的东西来完成,或者更可能是因为我还没有阅读mixin我自己的用户定义视图来处理post和GET。但是忽略这一点——因为我确信我应该使用mixin——上面的说法是“正确的”还是有建议
干杯 看一看,这里列出了基础知识。你也应该看一看
一些具体反馈:
- 您正确地使用了UserProfile模型,但每次添加新用户时(通过管理界面或在其中一个视图中以编程方式)都必须创建一个UserProfile的实例。您可以通过向用户注册
信号来完成此操作:post\u save
def create_user_profile(sender, instance, created, **kwargs): if created: UserProfile.objects.create(user=instance) post_save.connect(create_user_profile, sender=User)
- 您应该使用
的实例初始化ModelForm,而不是UserProfile
。使用User
(如果在settings.py中定义request.user.get\u profile()
),您始终可以获取当前用户配置文件。您的视图可能如下所示:AUTH\u profile\u模块
def editprofile(request): user_profile = request.user.get_profile() if request.method == 'POST': form = UserProfileForm(request.POST, instance=user_profile) if form.is_valid(): form.save() return HttpResponseRedirect('/accounts/profile') else: form = UserProfileForm(instance=user_profile) # ...
- 无需在模型表单中进行初始化重写。无论如何,您将使用UserProfile实例调用它。如果要创建新用户,只需调用用户构造函数:
user = User() user.save() form = UserProfileForm(instance = user.get_profile()) # ...
- 您正确地使用了UserProfile模型,但每次添加新用户时(通过管理界面或在其中一个视图中以编程方式)都必须创建一个UserProfile的实例。您可以通过向用户注册
信号来完成此操作:post\u save
def create_user_profile(sender, instance, created, **kwargs): if created: UserProfile.objects.create(user=instance) post_save.connect(create_user_profile, sender=User)
- 您应该使用
的实例初始化ModelForm,而不是UserProfile
。使用User
(如果在settings.py中定义request.user.get\u profile()
),您始终可以获取当前用户配置文件。您的视图可能如下所示:AUTH\u profile\u模块
def editprofile(request): user_profile = request.user.get_profile() if request.method == 'POST': form = UserProfileForm(request.POST, instance=user_profile) if form.is_valid(): form.save() return HttpResponseRedirect('/accounts/profile') else: form = UserProfileForm(instance=user_profile) # ...
- 无需在模型表单中进行初始化重写。无论如何,您将使用UserProfile实例调用它。如果要创建新用户,只需调用用户构造函数:
user = User() user.save() form = UserProfileForm(instance = user.get_profile()) # ...