Django 定义模型类方法
以下在 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 技术交流群。
上一篇: Centos 中安装 telnet 服务
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论