본문 바로가기
Django

django query filter, value, distinct

by 이농이능 2018. 3. 28.



1.


filter 만 했을 때와 , filter().values() 했을 때 차이.


# This list contains a Blog object.
>>> Blog.objects.filter(name__startswith='Beatles')
<QuerySet [<Blog: Beatles Blog>]>

# This list contains a dictionary.
>>> Blog.objects.filter(name__startswith='Beatles').values()
<QuerySet [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]>


원하는 속성값만 가지고 오고 싶을 땐, 매개변수로 속성값을 넣어서 가져온다.

>>> Blog.objects.values()
<QuerySet [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]>
>>> Blog.objects.values('id', 'name')
<QuerySet [{'id': 1, 'name': 'Beatles Blog'}]>


2. 


distinct()

distinct(*fields)


SQL 문에서 SELECT DISTINCT 한 것과 같은 쿼리 셋을 반환한다.



처음에 사용할 때 distinct 안에 속성값을 넣어야하는 줄 알았지만,

NotImplementedError: DISTINCT ON fields is not supported by this database backend


이런 에러 발생


찾아보니, 다행히 stackoverflow에 해결책이 있었다.

OrderNotes.objects.filter(item=item).distinct('shared_note')

아래쪽처럼 사용해야한다.!
OrderNotes.objects.filter(item=item).values_list('shared_note', flat=True).distinct()

사용예시)

result_filter = table1.objects.filter(attribute=attribute_).values('num').distinct()



3.  values 와 values_list 차이


The values() method returns a list of dictionaries:

[{'comment_id': 1}, {'comment_id': 2}]

The values_list() method returns a list of tuples:

[(1,), (2,)]

If you are using values_list() with a single field, you can use flat=True to return a list rather than a list of tuples.

[1, 2]



출처: https://docs.djangoproject.com/en/2.0/ref/models/querysets/




'Django' 카테고리의 다른 글

django 에서 bulk insert  (0) 2018.04.02
django fliter 에다 list 넣기  (0) 2018.03.29
django query  (0) 2018.03.28
[django] ajax 사용해서 화면 수정  (2) 2018.03.19
django paginator 페이지 수 제한하기  (0) 2018.02.20