Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django编辑用户和用户配置文件对象_Django - Fatal编程技术网

django编辑用户和用户配置文件对象

django编辑用户和用户配置文件对象,django,Django,所以我用django做了一个通用的“账户”页面。我使用了django注册插件,目前有一个(djang标准)用户对象,以及一个UserProfile和UserProfileForm对象 我想这是一个风格或最佳实践的问题。我的计划是“正确的”,还是有“更好的/推荐的/标准的方法”来做到这一点 我计划做的是根据请求创建UserProfile。用户ie: form = UserProfileForm(instance=User) (并将该表单发送到视图),在UserProfileForm中: clas

所以我用django做了一个通用的“账户”页面。我使用了django注册插件,目前有一个(djang标准)用户对象,以及一个UserProfile和UserProfileForm对象

我想这是一个风格或最佳实践的问题。我的计划是“正确的”,还是有“更好的/推荐的/标准的方法”来做到这一点

我计划做的是根据请求创建UserProfile。用户ie:

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)
    
  • 您应该使用
    UserProfile
    的实例初始化ModelForm,而不是
    User
    。使用
    request.user.get\u profile()
    (如果在settings.py中定义
    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)
    
  • 您应该使用
    UserProfile
    的实例初始化ModelForm,而不是
    User
    。使用
    request.user.get\u profile()
    (如果在settings.py中定义
    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())
    # ...
    

FYI截至今日,已弃用验证配置文件模块和获取配置文件。截至今日,已弃用验证配置文件模块和获取配置文件