Django_Relation(Like)
Relation
Likeの実装
モデルの構成
class Article(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
like_users = models.ManyToManyField(settings.AUTH_USER_MODEL)
title = models.CharField(max_length=10)
content = models.TextField()
モデルの変更
class Article(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE) like_users=models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='like_articles')
title = models.CharField(max_length=10)
content = models.TextField()
現在のユーザーから地域で使用可能なDB API
article.user
article.like_users
user.article_set
user.like_articles
urlの作成
app_name = 'articles'
urlpatterns = [
path('', views.index, name='index'),
path('<int:article_pk/likes/', views.likes, name='likes'),
]
ビューの作成
def likes(request,article_pk) :
#어떤 객체에 좋아요가 눌렸는지 확인
article = get_object_or_404(Article, pk=article_pk)
#누르는게 무조건 좋아요를 활성화하는 것은 아님 좋아요를 2번 누르면 취소되게 구현할 수 있음
#이 게시글에 좋아요를 누른 유저 목록에 현재 요청하는 유저가 있다면 좋아요 취소
if request.user in article.like_users.all() :
article.like_users.remove(request.user)
#아니면 좋아요
else :
article.like_users.add(request.user)
return redirect('articles:index')
ビュー2の作成
def likes(request,article_pk) :
article = get_object_or_404(Article, pk=article_pk)
if article.like_users.filter(pk=request.user.pk).exists() :
article.like_users.remove(request.user)
else :
article.like_users.add(request.user)
return redirect('articles:index')
QuerySet API - 'exists()'
結果が
ボタンを作成
<form action="{% url 'articles:likes' article.pk %}" method='POST'>
{% csrf_token %}
<input type="submit">
</form>
サーバーの実行
ユーザーを
class Meta :
model = Article
exclude = ('user','like_users',)
<div>
<form action="{% url 'articles:likes' article.pk %}" method='POST'>
{% csrf_token %}
{% if user in article.like_users.all %}
<button class="btn" style="background-color : transparent;">
<i class="fa regular fa-heart" style="color:red"></i>
</button>
{% else %}
<button class="btn" style="background-color : transparent;">
<i class="fa regular fa-heart" style="color:black" ></i>
</button>
{% endif %}
</form>
</div>
注文してテーブル
Reference
この問題について(Django_Relation(Like)), 我々は、より多くの情報をここで見つけました https://velog.io/@holawan/DjangoRelationLikeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol