python - 如何在 Django 中保存自定义用户类属性?
问题描述
我在使用 Django 方面相当新,所以如果有任何不清楚的地方,请原谅。
基本上,我创建了一个自定义用户模型:
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
class AccountManager(BaseUserManager):
def create_user(self, username, password=None):
if not username:
raise ValueError('A username is required for you to sign up')
user = self.model(
username=username,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, username, password):
user = self.create_user(
password=password,
username=username,
)
user.is_admin = True
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user
class Account(AbstractBaseUser):
username = models.CharField(max_length=40, unique=True)
password = models.CharField(max_length=999)
points = 0
date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
last_login = models.DateTimeField(verbose_name='last login', auto_now=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
USERNAME_FIELD = 'username' # Cannot be included in required fields
REQUIRED_FIELDS = ['password']
objects = AccountManager()
def __str__(self):
return self.username
def has_perm(self, perm, obj=None):
return self.is_admin
@staticmethod
def has_module_perms(app_label):
return True
在 下class Account(AbstractBaseUser)
,我定义了一个属性points
。我想让它每当用户重定向时,用户都会得到一些分数。
from django.shortcuts import render, redirect
def home_page_view(request):
return render(request, "home_page.html", {})
def free_points(request):
request.user.points += 10
request.user.save()
return render(request, "add_points_test.html", {})
为了检查是否添加了点,我稍微更改了视图下的代码:
from django.shortcuts import render, redirect
def home_page_view(request):
print(request.user.points)
return render(request, "home_page.html", {})
def add_points_view(request):
request.user.points += 10
request.user.save()
print(request.user.points)
return render(request, "add_points_test.html", {})
从我所见,当用户被重定向到时,打印出来add_points_view
的print
语句。但是,当用户被重定向回 时,将打印出下面的语句而不是. 这表明我根本没有改变。add_points_view
10
home_page_view
print
home_page_view
0
10
points
我不确定我应该做什么。对不起,如果这个问题是一个不好的问题,我真的在互联网上找不到任何东西。
提前致谢。
解决方案
核心问题是你没有定义points
为持久化字段,所以即使你调用了save方法中add_points_view
的信息也会丢失。
推荐阅读
- r - 打印列名而不是数字数据框
- go - CGO 的 OOM 异常
- mongodb - 在 Kubernetes 上为 mongodb 创建 StatefulSet 时出错
- reactjs - 使用 Nextjs 进行反应表过滤
- azure-api-management - 如何使用基于 azure 资源列表 api 中资源的 createdTime 的筛选结果
- web - Pingdom - 仅在我的网站启动而不是关闭时发出警报(验证我的网站没有暴露在互联网上)
- scala - 为什么在这种情况下 scala 不能使用单个抽象方法?
- http - 一些浏览器将 API 调用视为跨站点
- regex - 如何在 TypeScript 中构建包含动态字符串的正则表达式?
- java - 我想测试我的控制器方法,它只消耗=MediaType.MULTIPART_FORM_DATA_VALUE