Django
Q object
filter
, exclude
, get
κ³Ό κ°μ μ‘°ν ν¨μμ ν¨κ» μ¬μ©ν΄μ 볡μ‘ν 쑰건 κ²μμ ν¨μ¨μ μΌλ‘ ν μ μμ
- κ²μ μ‘°κ±΄μ΄ λ³΅μ‘ν΄μ§λ©΄ filter()μμ λ€μ΄κ°μΌ ν κ²λ€μ΄ λ§μμ§λ©΄μ κΈΈμ΄μ§κ² λλλ°, μ΄λ κ² λ³΅μ‘ν νν°λ§ 쑰건μ κ±Έμ΄μΌν λ Q κ°μ²΄λ₯Ό μ¬μ©νλ©΄ ν¨μ¨μ μ΄κ³ κ°λ
μ±λ λμμ§
- filter()λ AND μ°μ°μκ° ν¬ν¨ λκΈ° λλ¬Έμ OR μ°μ°μλ₯Ό μ¬μ©ν΄μΌ νλ κ²½μ°μλ Q κ°μ²΄λ₯Ό μ¬μ©ν΄μΌ ν¨
- Q κ°μ²΄λ₯Ό μ΄μ©νλ©΄ SQL μ§μλ¬Έμ WHERE μ μ ν΄λΉνλ κΈ°λ₯μ μ¨μ ν νμ© κ°λ₯
OR μ°μ° & AND μ°μ°
- Q objectsλ &μ |μ μ¬μ©μ΄ κ°λ₯
>>> from django.db.models import Q
>>> queryset = User.objects.filter(
Q(first_name__startswith='R') | Q(last_name__startswith='D')
)
>>> queryset
<QuerySet [<User: Ricky>, <User: Ritesh>, <User: Radha>, <User: Raghu>, <User: rishab>]>
>>> queryset = User.objects.filter(
Q(first_name__startswith='R') & Q(last_name__startswith='D')
)
>>> queryset
<QuerySet [<User: Ricky>, <User: Ritesh>, <User: rishab>]>
- Q objects λ '~' μ°μ°μλ₯Ό μ¬μ©νμ¬ λ¬΄ν¨νν μ μμΌλ―λ‘ μΌλ° 쿼리μ λΆμ 쿼리(NOT)λ₯Ό κ²°ν©ν μ‘°νλ₯Ό νμ©
Q(question__startswith='Who' | ~Q(pub_date__year=2005)
- ν€μλ μΈμλ₯Ό μ¬μ©νλ κ° μ‘°ν ν¨μ(Lookup Functions)λ νλ μ΄μμ Q objects λ₯Ό μμΉ μ§μ λμ§ μμ μΈμλ‘ μ λ¬ κ°λ₯
- ν€μλ μΈμ : filter(), exclude(), get()
- μ‘°ν ν¨μμ μ¬λ¬ κ°μ Q objects μΈμλ₯Ό μ 곡νλ©΄ μΈμλ ANDκ° λ¨
Poll.objects.get(
Q(question__startswith='Who'),
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
- μ‘°ν ν¨μλ Q objectsμ ν€μλ μΈμμ μ¬μ©μ νΌν©ν μ μλλ° μ‘°ν ν¨μμ μ 곡λ λͺ¨λ μΈμλ ADDκ° λ¨
- Q objectsκ° μ 곡λλ©΄ ν€μλ μΈμμ μ μ μμ μμΌ ν¨
Poll.objects.get(
question__startswith='Who',
Q(pub_date=date(2005, 5, 2) | pub_date=date(2005, 5, 6)),
)