Django가 개발한 사용자 정의 관리자, ORM 관련 테이블, 트랜잭션
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))
끝!!!