Django开发之自定义管理器、ORM关联表、事务

Django开发之自定义管理器、ORM关联表、事务

  • 1.新建模型类
  • 2.自定义模型类
  • 3.在自定义模型类添加增删改查方法
  • 4.ORM关联表、事务
    • 4.1 通过对象访问外键表
    • 4.2 根据外键表数据过滤
    • 4.3 反向访问
    • 4.4 反向过滤

前言:向管理器类中添加额外的方法,如一些常用的增删改查操作,view层只需要调用即可。ORM关联表、事务的使用。注意:此Django是基于3.0.2版本的,里面有些方法可能与老版本有些出入,使用的时候请注意!


1.新建模型类

from django.db import models

class Country(models.Model):
    name = models.CharField(max_length=100)
    class Meta:
        db_table = 'country'
        verbose_name = '国家'
        verbose_name_plural = verbose_name

class Student(models.Model):
    name = models.CharField(max_length=200)
    grade = models.PositiveSmallIntegerField()
    country = models.ForeignKey(Country,on_delete=models.PROTECT)
    objects = ManagerStudent()
    class Meta:
        db_table = 'student'
        verbose_name = '学生'
        verbose_name_plural = verbose_name

2.自定义模型类

在Student类中添加:

objects = ManagerStudent()

然后新建一个ManagerStudent类,继承models.Manager方法

class ManagerStudent(models.Manager):
	pass

3.在自定义模型类添加增删改查方法


class ManagerStudent(models.Manager):
    def query(self):
        student = self
        """查询"""
        qs = student.values()
        return {'ret': 0, 'retlist': list(qs)}

    def add_one(self,name,grade,country_id):
        """增加"""
        student = None
        try:
            student = self.get(name=name)
        except:
            student = None

        if student:
            return {'ret': 1, 'msg': '已经存在'}
        else:
            data = self.create(name=name, grade=grade, country_id=country_id)
            print(data)
            return {'ret': 0}

    def modify(self,id,name,grade,country_id):
        """修改"""
        student = None
        try:
            studnet = self.get(id=id)
        except:
            return {'ret':1,'msg':'客户不存在'}
        studnet.name = name
        studnet.grade = grade
        studnet.country_id = country_id
        studnet.save()
        return {'ret':0,'msg':'修改成功'}

    def delete(self,id):
        """删除"""
        student = None
        try:
            student = self.get(id=id)
        except student.DoesNotExist:
            return {'ret':1,'msg':'客户不存在'}
        student.delete()
        return {'ret':0,'msg':'删除成功'}

注意:调用的时候,只需要Student.objects.方法(参数),即可。

4.ORM关联表、事务

4.1 通过对象访问外键表

s1 = Student.objects.get(name='fly1')
country_name = s1.country.name
print(country_name)

4.2 根据外键表数据过滤

data = Student.objects.filter(grade=1, country__name='中国').values()
print(list(data))

4.3 反向访问

cn = Country.objects.get(name='中国')
data = cn.student_set.values()
print(list(data))

4.4 反向过滤

data = Country.objects.filter(student__grade=1).values().distinct()
print(list(data))

结束!!!

你可能感兴趣的:(Python系列,Django自定义管理器,ORM关联表,Django数据库操作)