Django 노트(모델 클래스 - 관리자)

4410 단어 Django
모델 클래스 - 관리자
역할:데이터베이스와 상호 작용
모든 모델 클래스는 기본적으로 하나의 관리자가 있는데 objectsobjects는 Django가 자동으로 생성하는 관리자로 데이터에 대한 조회를 실현할 수 있다.objects는 모델스이다.Manger 클래스의 객체
특수 조건을 만족시키기 위해 관리자를 사용자 정의할 수 있습니다
1. 관리자의 원본 조회 집합을 수정합니다 (get queryset () 방법을 다시 씁니다)
class BookInfoManager(models.Manager):
    def get_queryset(self):
        return super(BookInfoManager,self).get_queryset().filter(isDelete=False)

사용자 정의 관리자 이후 Django에서 기본 Objects 관리자를 생성하지 않음
2. 모델 클래스 대상의 창설 방법
BookInfo 모델 클래스
from django.db import models


class BookInfo(models.Model):
    btitle=models.CharField(max_length=20)
    bpub_date=models.DateTimeField(db_column='pub_date')
    bread=models.IntegerField(default=0)
    bcomment=models.IntegerField(default=0)
    isDelete=models.BooleanField(default=False)

    class Meta:
        db_table='bookinfo'
    #                     
    books1=models.Manager()
    books2=BookInfoManager()

모델 클래스__init__ 방법은 사용할 수 없습니다.
해결 방법:
① 모델 클래스에서 클래스 방법 정의
@classmethod
def creat(cls,btitle,bpub_date):
  b=BookInfo()
  b.btitle=title
  b.bpub_date=pub_date
  b.bread=0
  b.bcomment=0
  b.isDelete=False
  return b

② 사용자 정의 관리자에서 방법 정의(권장)
class BookInfoManager(models.Manager):
    def create(self,btitle,bpub_date):
        b=BookInfo()
        b.btitle=title
        b.bpub_date=pub_date
        b.bread=0
        b.bcomment=0
        b.isDelete=False
        return b

문법
book=BookInfo.books2.create("abc",date(1980,1,1))

조회
속성비교부(술어) = 값btitle__contains=' '취합
  • Max,Min,Avg
  • from django.db.modlels import Max
    list = BookInfo.books1.aggregate(Max('bpub_date'))
  • count
  • count = list.count()

    F 객체
    두 필드 비교(일반 조회는 필드와 상수 비교)
    from django.db.modlels import Max,F
    list = BookInfo.books1.filter(bread__gt=F('bcomment'))

    Q 개체
    필터의 매개 변수는 논리와 (&) 관계입니다
    논리적이거나(|) Q 객체 사용
    from django.db.models import Q
    list = BookInfo.books1.filter(Q(pk__lt(4)|Q(btittle__contains='1'))

    좋은 웹페이지 즐겨찾기