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객체를 가져올 수 있다.
다음과 같이 작성하면 db에 저장되는 것을 볼 수 있다.
좋아요의 수와 좋아요 취소기능을 생성해보자!
<a href="{% url 'dashboards:like' dashboards.pk %}">좋아요</a>{{ dashboards.like_users.count }}
완료!!