Django 定义模型类方法

发布于 2024-06-22 00:07:03 字数 2446 浏览 17 评论 0

以下在 python3.6 Django2.2.10 测试通过。

  • orm 模型全称对象关系映射模型,能够将数据库中的表映射成类,记录(行数据)映射成对象,字段映射成对象的属性。
  • 定义数据类模型能够帮助我们在更上层设计业务逻辑,将复杂的业务逻辑与数据逻辑分离。
  • 对重复的业务逻辑代码或者数据查询代码,可封装成类方法,实现复用。

以下定义了用户信息的模型代码。 UserInfo 类实例化后为用户对象,用户对象具备了用户名、工号等属性信息,同时具备 get_joined_ponits() 等方法。类方法也可以传递参数,以下代码类方法没有参数

from training.models import Course

class UserInfo(models.Model):
"""
用户详细信息表
"""
id = models.AutoField(primary_key=True)
user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True)
job_num = models.CharField(verbose_name="工号", max_length=8, blank=True)
realname = models.CharField(verbose_name="真实姓名", max_length=10)
email = models.EmailField(verbose_name="邮箱", max_length=32)
phone = models.CharField(verbose_name="手机号", max_length=11)
group = models.ForeignKey(Group, related_name='user_group', verbose_name="用户所属组", on_delete=models.DO_NOTHING)
rank = models.ForeignKey(Rank, related_name="user_rank", verbose_name="用户职级", on_delete=models.DO_NOTHING)
role = models.ForeignKey(Role, related_name='user_role', verbose_name="用户角色", on_delete=models.DO_NOTHING)
education = models.CharField(verbose_name="学历", max_length=20)
pre_job = models.CharField(verbose_name="上一份工作", max_length=20)
entry_time = models.DateField(verbose_name="入职时间")

class Meta:
verbose_name = "用户信息"
verbose_name_plural = "用户信息"

def __str__(self):
return self.user.username

def get_joined_points(self):
# 类方法,返回该 User 参加的培训的积分
course = Course.objects.filter(student=self.user.userinfo).exclude(teacher_id=self.id)
point = course.count() * 1
return point

def get_group_points(self):
# 类方法,返回该 User 主持小组的培训的积分
course = Course.objects.filter(teacher_id=self.id).exclude(range="测试部")
return course.count() * 2

def get_department_points(self):
# 类方法,返回该 user 主持部门的培训的积分
course = Course.objects.filter(teacher_id=self.id, range="测试部")
return course.count() * 2

类方法在实例化后,可通过如下方式进行调用

xiaoming = UserInfo.objects.get(id=1)
# 返回 xiaoming 参加培训的积分
xiaoming.get_joined_points()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

幽蝶幻影

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文