【问题标题】:How to update user details in custom user model in django如何在 django 中更新自定义用户模型中的用户详细信息
【发布时间】:2022-10-22 22:46:58
【问题描述】:

我刚刚从 abstractuser 创建了一个自定义用户模型。我可以创建用户,但更新不起作用,显示一些错误。我也是英语周,所以我知道如何分享我的问题。简而言之,我想编辑用户的电子邮件和密码。

###This is my user model

class User(AbstractUser):
    roles =(
       ('Admin','Admin'),
        ('Placement Manager','Placement Manager'),
        )
    username=models.CharField(max_length=100,null=True,blank=True)
    email = models.EmailField(max_length=50, null=True,blank=True)
    phone = models.IntegerField(unique=True)
    role = models.CharField(max_length=100,choices = roles,null=True,blank=False)
    USERNAME_FIELD = 'phone'
    REQUIRED_FIELDS = ['email','username','role']

    objects=UserManager()

    def get_username(self):
        return self.email 
 ###This is my view 

def editPlacementManager(request):

    if request.method=='POST':
        name=request.POST.get('name')
        phone=request.POST.get('phone')
        email=request.POST.get('email')
        password=request.POST.get('password')
        userid = request.POST.get('pmId')

        User.objects.get(id=userid).update(username=name,phone=phone,email=email,password=password,role='Placement Manager')
        

        return redirect('listplacementmanager')
    return render(request,"index/placementmanager.html")
### The error is 

AttributeError at /editplacementmanager
'User' object has no attribute 'update'

【问题讨论】:

标签: python django abstractuser


【解决方案1】:

是的,您会收到该错误,因为更新方法仅适用于查询集。 所以你可以这样做:


def editPlacementManager(request):

    if request.method=='POST':
        name=request.POST.get('name')
        phone=request.POST.get('phone')
        email=request.POST.get('email')
        password=request.POST.get('password')
        userid = request.POST.get('pmId')

        user = User.objects.get(id=userid)
        user.name = name
        user.phone = phone
        user.email = email
        # You can continue with whichever field you want
        user.save()
        # Then finally you save the object with the updated fields
        

        return redirect('listplacementmanager')
    return render(request,"index/placementmanager.html")

【讨论】:

    【解决方案2】:

    实际上这是一件简单的事情,只需对密码进行哈希更新即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-04
      • 2014-07-17
      • 2012-05-23
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多