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 |