[TIL_Carrotww] 58 - 22/11/23

μœ ν˜•μ„Β·2022λ…„ 11μ›” 24일
0

TIL

λͺ©λ‘ 보기
68/138
post-thumbnail

πŸ“Carrotww의 μ½”λ”© 기둝μž₯

🧲 django

πŸ” many to many field μ •λ ¬ν•˜κΈ°

class FilterImage(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='filter_user')
    filter_name = models.CharField(max_length=25)
    filter_image = models.ImageField(blank=False, upload_to='filter')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    likes = models.ManyToManyField(User, related_name="filter_likes", blank=True)
    content = models.TextField()

ν˜„μž¬ λͺ¨λΈμ€ μœ„μ™€ 같은 μƒνƒœμ΄λ©° likes 순으둜 μ •λ ¬ν•˜κΈ°λ₯Ό μ›ν•˜λŠ”λ° 그게 쉽지 μ•Šμ•˜λ‹€.
μ°Ύμ•„λ³΄λ‹ˆ
μ•„λž˜μ™€ 같은 λ°©λ²•μœΌλ‘œ 정렬이 κ°€λŠ₯ν•˜λ‹€.

전체적인 view

class FilterView(ListAPIView):
    pagination_class = Cursor_created
    serializer_class = FilterallSerializer
    queryset = FilterImage.objects.all()

    def get(self, request):
        sorting_val = self.request.GET.get('sort')
        # get νŒŒλΌλ―Έν„° λ‚΄μš©μ€‘ sort λ¬Έμžμ—΄μ˜ λ‚΄μš©μ„ κ°€μ Έμ˜΄
        if sorting_val == 'recreate':
            # μ΅œμ‹  순 μ •λ ¬
            self.pagination_class = Cursor_reverse_created
        if sorting_val == 'like':
            # μ’‹μ•„μš” 순 μ •λ ¬
            self.pagination_class = Cursor_likes
        if sorting_val == 'modal':
            # λͺ¨λ‹¬ νŽ˜μ΄μ§€μ—μ„œ filter λͺ©λ‘ μš”μ²­ μ‹œ
            self.queryset = FilterImage.objects.annotate(count=Count('likes')).order_by('-count')
            self.pagination_class = Cursor_likes_modal

        pages = self.paginate_queryset(self.get_queryset())
        # pages λΌλŠ” λ³€μˆ˜μ— get_queryset을 μ΄μš©ν•˜μ—¬ queryset을 κ°€μ Έμ˜€κ³  pagination에 λ„£μ–΄μ€Œ
        slz = self.get_serializer(pages, many=True)
        return self.get_paginated_response(slz.data)

if 문에 get url νŒŒλΌλ―Έν„° μš”μ²­μ— 따라 μ–΄λ–€μ‹μœΌλ‘œ μ •λ ¬ν•  건지, 즉 μ–΄λ–€ νŽ˜μ΄μ§€λ„€μ΄μ…˜μ„ μ‚¬μš©ν•  것인지 적어둔 것이닀.
ν•˜μ§€λ§Œ cursorpagination 은 ordering ν•„λ“œκ°€ ν•„μˆ˜μ—¬μ„œ queryset을 μ •λ ¬ν•˜κ³  pagination queryset에 λ„£μ–΄μ€€λ‹€ 해도 λ‹€μ‹œ 정렬이 λ˜μ—ˆλ‹€.
심지어 likesλŠ” many to many ν•„λ“œμ—¬μ„œ ν•΄λ‹Ή ν…Œμ΄λΈ”μ΄ μ•„λ‹Œ λ‹€λ₯Έ ν…Œμ΄λΈ”μ„ μ°Έμ‘°ν•˜μ—¬ 가져와 쀑볡이 생겨버렸닀...
μ΄κ±°λŠ” 별짓을 λ‹€ν•΄λ΄€λŠ”λ° μ•ˆλΌμ„œ 일단 μŠ€νƒ‘...ν•˜κ³  내일 ν•˜κΈ°λ‘œ ν–ˆλ‹€...

many to many field κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•˜κΈ°
μœ„ μ½”λ“œ λ°”νƒ•μœΌλ‘œ queryset을 μ •λ ¬ ν•œ 것이닀.

self.queryset = FilterImage.objects.annotate(count=Count('likes')).order_by('-count')

μ΄λŸ°μ‹μœΌλ‘œ queryset을 λ°”κΎΈμ–΄ μ£Όλ©΄ λœλ‹€.
ν•˜μ§€λ§Œ μœ„μ—μ„œ λ§ν–ˆλ“  paginate queryset으둜 λ‹€μ‹œ λ“€μ–΄κ°€ pagenumberpagination은 잘 λ™μž‘μ„ ν•˜μ§€λ§Œ cursorpagination은 λ™μž‘μ„ ν•˜μ§€ μ•ŠλŠ”λ‹€...γ… γ…œγ… 

profile
Carrot_hyeong

0개의 λŒ“κΈ€