如何创建抽象用户

2024-09-27 22:22:19 发布

您现在位置:Python中文网/ 问答频道 /正文

对于account类型,我使用AbstractUser构造模型

class Profile(AbstractUser):
    pass
class Second(Profile)
    #fields here
class Third(Profile)
    #fields here

相应的形式如下

^{pr2}$

我不知道这是定义模型函数的正确方法

我现在的问题是如何创建一个包含second modelThird model字段的用户。? 我有HTML页面,用户可以选择创建哪个帐户USerType。。在

^{3}$

错误(1062,“密钥'username'”的条目“”重复)。 但它的创建用户,我认为第二种形式不起作用。。 如何解决这个错误?在


Tags: 用户模型类型fieldsmodelhere错误account
1条回答
网友
1楼 · 发布于 2024-09-27 22:22:19

我看到这些台词,马上就注意到你的问题:

class Profile(AbstractUser):
    pass
class Second(Profile)
    #fields here
class Third(Profile)
    #fields here

创建用户时:

^{pr2}$

你正在创建一个用户。在

创建第二个用户时:

Second_user = Second()
Second_user.artist_name = request.POST['artist_name']
Second_user.music_genre = request.POST['music_genre']
Second_user.profile_image = request.FILES['profile_image']
Second_user.save()

您没有填充username字段。也许您至少运行了两次此代码,而数据库中存在一个空的用户记录。在

然而,最大的问题不是你问什么。最大的问题是:

  1. 对用户调用create。将创建一个用户条目。在
  2. 在第二个实例上构造并调用save创建另一个用户条目并创建第二个条目。在
  3. 您在created用户上冗余地调用save。这个电话没有效果。在

因此,您正在创建两个用户条目。如果希望一个用户有两个概要文件,则必须修复模型。目前您有:

class Profile(AbstractUser):
    pass

class Second(Profile)
    #fields here

class Third(Profile)
    #fields here
  1. 如果不向AbstractUser添加字段:为什么不直接使用默认用户?(只是为了方便;不是解决问题的一部分)。在

    User = get_user_model()
    
  2. 您需要创建概要文件,而不是子类,因此用户可能同时属于这两个概要文件。这是一个完全不同的OOP概念。所以这个问题不是关于Django,而是关于OOP。在

    class Second(Model):
        user = ForeignKey(User, ...params...)
        ...fields...
    
    class Third(Model):
        user = ForeignKey(User, ...params...)
        ...fields...
    
  3. 您需要修复调用以使用第二个配置文件实例化用户:

    User = get_user_model()
    new_user = User.objects.create_user(**form.cleaned_data)
    
    Second_user = Second()
    Second_user.user = new_user
    Second_user.artist_name = request.POST['artist_name']
    Second_user.music_genre = request.POST['music_genre']
    Second_user.profile_image = request.FILES['profile_image']
    Second_user.save()
    
  4. 看在上帝的份上,让你的观点原子化/事务化!您正在添加多个记录。

相关问题 更多 >

    热门问题