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 클래스를 새로 만듭니다.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))
    

    끝!!!

    좋은 웹페이지 즐겨찾기