django 모델 조건 필터

3489 단어 Django
문서 목록
  • Queryset
  • queryset 기술
  • #1 aggregate
  • #1.1 Avg 평균
  • #1.2 Sum 구화
  • #1.3 맥스 최대
  • #1.4 카운트 수
  • #2 annotate
  • #3 사전
  • #4 조건 선택
  • #4.1 디스팅
  • 주의
  • #5 조건 매개변수
  • Queryset
    queryset 팁
    #1 aggregate
    models.py
    from django.db import models
    
    class Author(models.Model):
        name = models.CharField(max_length=100)
        age = models.IntegerField()
    
    class Publisher(models.Model):
        name = models.CharField(max_length=300)
    
    class Book(models.Model):
        name = models.CharField(max_length=300)
        pages = models.IntegerField()
        price = models.DecimalField(max_digits=10, decimal_places=2)
        rating = models.FloatField()
        authors = models.ManyToManyField(Author)
        publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
        pubdate = models.DateField()
    
    class Store(models.Model):
        name = models.CharField(max_length=300)
        books = models.ManyToManyField(Book)
    

    #1.1 Avg 평균
    >>> from django.db.models import Avg
    >>> Book.objects.all().aggregate(Avg('price'))
    {'price__avg': 34.35}
    

    #1.2 Sum 구화
    >>> from django.db.models import Sum
    >>> Author.objects.aggregate(total_pages=Sum('book__pages'))
    {'total_pages': int('4305.00')}
    

    #1.3 맥스 최대
    >>> from django.db.models import Max
    >>> models.Book.objects.all().aggregate(Max('price'))
    {'price__max': int('2154.00')}
    >>> models.Book.objects.all().aggregate(a=Max('price'))
    {'a': int('2154.00')}
    

    #1.4 카운트 수
    >>> from django.db.models import Count
    >>> models.Book.objects.all().aggregate(Count('id'))
    {'id__count': 10}
    

    #2 annotate
    aggregate는 전체queryset의 값을 계산하는데count()에 해당한다.annotate는queryset의 모든 값을 지정한 속성에 집합하여 그룹by
    >>> from django.db.models import Count
    >>> pubs = Publisher.objects.annotate(num_books=Count('book'))
    >>> pubs
    , , ...]>
    >>> pubs[0].num_books
    73
    

    annotate는 하나의queryset 대상을 되돌려줍니다.queryset 대상 중의 모든obj에 하나의 속성이 추가되었습니다. (여기에num books 속성이 추가되었습니다.) 이 속성의 값은 바로 이 대상의Count ('book') 결과입니다. 즉 모든obj 대상의num책 값은 이 대상의 책 개수입니다
    #3 사전
    condtions: {'date': '2018-05-22'}
    models.PlayUser.objects.filter(**condtions)
    

    #4 조건 선택
  • 는 – Filter
  • 와 같다
  • 는 – exclude
  • 와 같지 않다
  • 무게제거 -distinct
  • #4.1 distinct 주의
    시계 안의 똑같은 데이터를 제거하고
    models.SpecialGamesBet.objects.all().distinct()
    

    만약 어떤 필드에 따라 중복된 것을 제거해야 한다면, 데이터베이스가PostgreSQL이어야만 지원하고, 다른 데이터베이스는 필드별로 중복되는 것을 지원하지 않는다
    models.SpecialGamesBet.objects.all().distinct("id") #   PostgreSQL          
    

    #5 조건 매개변수
    __exact       like 'aaa'
    __iexact             ilike 'aaa'
    __contains    like '%aaa%'
    __icontains          ilike '%aaa%',    sqlite  ,contains        icontains。
    __gt   
    __gte     
    __lt   
    __lte     
    __in      list   
    __startswith  ...  
    __istartswith  ...        
    __endswith  ...  
    __iendswith  ...  ,     
    __range  ...   
    __year        
    __month        
    __day       
    __isnull=True/False
    

    좋은 웹페이지 즐겨찾기