Django開發之自定義管理器、ORM關聯表、事務


前言:向管理器類中添加額外的方法,如一些常用的增刪改查操作,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))

結束!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章