본문 바로가기

Framework/Django

쿼리셋(QuerySet)을 필드(field)에 따라 나누기 in Django

일정을 날짜별로 출력하고 싶어서 날짜는 한번 출력하고 내용을 그 밑에 출력해야했다.

떠오른 순서대로 적어보자면

 

1. todo_list를 템플릿에서 커스텀 필터를 만들어서 처리하기

2. 날짜별로 따로 보내기

3. view에서 리스트로 나누기

4. view에서 딕셔너리로 나누기

 

등이었는데 구현은 1번과 4번만 해보았다. (자료구조를 배운 후 더 나은 방법을 찾을 것)

 

최종적으로 1번대신 4번으로 구현해 놓은 상태인데 템플릿에서 이것저것 하는거보단 view에서 많은 일을 처리해서 주는게 더 낫겟지 라는 생각이었다.

 

Python Django

# models.py
class Todo(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    deadline = models.DateTimeField()
    content = models.TextField()

# view.py
todo_list = request.user.todo_set.order_by('deadline').all()
todo_list_deadline = defaultdict(list)
for todo in todo_list:
    todo_list_deadline[todo.deadline].append(todo)
deadline_list = list(todo_list_deadline.keys())

HTML

{% if todo_list_deadline %}
    {% for deadline in deadline_list %}
        <div class="deadline">{{ deadline|date:'Y년 m월 d일 D' }}</div>
        {% for todo in todo_list_deadline|get_item:deadline %}
            <div class="todo_list">
                <p class="todo">{{ todo.content }}</p>
            </div>
        {% endfor %}
    {% endfor %}
{% endif %}

 

출처: https://stackoverflow.com/questions/11388296/split-queryset-or-get-multiple-querysets-by-field-instead-of-just-ordering-by-fi

 

Split queryset or get multiple querysets by field instead of just ordering by field

I want to query a database in a way such that rather than just ordering by some field, I get a separate QuerySet (or dictionary, list, whatever) for each unique value of that field. Hopefully the ...

stackoverflow.com

 

'Framework > Django' 카테고리의 다른 글

글을 작성자만 보도록 만들기 in django  (0) 2022.03.04
시작하며  (0) 2022.03.03