querying in {django query}

Before you start (Blog, Author, Entry models)

앞으로 모든 예시는 아래의 코드에서 정의한 모델을 기반으로 제공된다.

from datetime import date

from django.db import models

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def __str__(self):
        return self.name

class Author(models.Model):
    name = models.CharField(max_length=200)
    email = models.EmailField()

    def __str__(self):
        return self.name

class Entry(models.Model):
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    pub_date = models.DateField()
    mod_date = models.DateField(default=date.today)
    authors = models.ManyToManyField(Author)
    number_of_comments = models.IntegerField(default=0)
    number_of_pingbacks = models.IntegerField(default=0)
    rating = models.IntegerField(default=5)

    def __str__(self):
        return self.headline

스크린샷 2023-07-06 09.32.11.png

Field lookups

docs

SQL의 WHERE 절로 변환이 되는 장고 모델 API이다. QuerySet로부터 filter, get, exclude 메서드의 키워드 인자로 들어가는 규칙에 대하여 정의한다.

<field>__<lookuptype>=<value>

여기에 예외가 존재하는데, ForeignKey 필드의 뒤에는 반드시 _id가 붙는다는 것이다. (에반데)

lookuptype의 종류는 field lookup reference에서 확인이 가능하다. 일단 자주 쓰이는 타입에 대해서만 알아보자.

Q 객체는 하나의 Lookup 안에 여러 조건을 넣어줄 수 있다.

F as field, Q as query in {django query}

Query문을 실행하기 전에 확인하고 싶은 경우

How can I see the raw SQL queries Django is running