Django 좋아요(like)

Happy_JG·2023년 7월 30일
0

Django

목록 보기
24/32

ManyToMany, relataed name

from imagekit.models import ProcessedImageField
from imagekit.processors import ResizeToFill

from django.db import models

from django.conf import settings
# Create your models here.

class Dashboard(models.Model):
    title = models.CharField(null=True,max_length=20)
    content = models.TextField(null=True)
    created_at = models.DateTimeField(null=True,auto_now_add=True)
    update_at = models.DateTimeField(null=True,auto_now=True)
    image = ProcessedImageField(upload_to='images/',
                                blank=True,processors=[ResizeToFill(300,150)],
                                format='JPEG',options={'quality':80})
    
    user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
    
    
    users = models.ManyToMany(settings.AUTH_USER_MODEL,on_delete = CASCADE)

좋아요 기능을 Dashboard 객체에 추가하기 위해서 다음과 같이 작성을 한다면 bash에서 경고메시지를 출력한다. 1:N관계에서는 역참조를 할 때 uesr.dashboard_set.all() 와 같은 형태로 작성하였지만 좋아요를 누르는 User(MANY)는 여러 Dashboard(MANY)에 좋아요를 누를 수 있다.

like_user = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='like_dashboards')

python manage.py shell_plus ipython 설치

>>> a1 = Dashboard.objects.all()[0]
>>> a1
<Dashboard: Dashboard object (1)>
>>> u1 = User.objects.all()[0]
>>> u1
<User: jmhu0410>
>>> a1.like_users.add(u1)
>>> a1
<Dashboard: Dashboard object (1)>
>>> a1.like_users.all()
<QuerySet [<User: jmhu0410>]>

첫 번째 Dashboard객체 a1에 model에서 추가한 속성 like_users 컬럼에 첫 번째 User객체를 add한 뒤, a1.like_users.all()을 하면 User객체를 가져올 수 있다.

like 기능 생성

다음과 같이 작성하면 db에 저장되는 것을 볼 수 있다.

좋아요의 수와 좋아요 취소기능을 생성해보자!

<a href="{% url 'dashboards:like' dashboards.pk %}">좋아요</a>{{ dashboards.like_users.count }}

완료!!

profile
hello!

0개의 댓글