Время ожидания request.user не отображается
Я только начал изучать Django. Я создаю простое приложение для блога и пытаюсь get the user liked time of post of request.user
.
Я сделал модель Post
и модель Like
. И когда пользователю нравится показывать время, когда пользователю нравится.
Но он не показывает понравившееся время.
models.py
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=30, default='')
class Likepost(models.Model):
by_user = models.ForeignKey(User, on_delete=models.CASCADE)
post_of = models.ForeignKey(Post, on_delete=models.CASCADE)
date_liked = models.DateTimeField(auto_now_add=True)
views.py
def blog_post_detail(request, post_id):
obj = get_object_or_404(Post, pk=post_id)
accessLikes = obj.likepost_set.all()
for All in accessLikes:
if request.user == All.by_user
All.request.user.date_liked
context = {'obj':obj}
return render(request, 'blog_post_detail.html', context}
Что я пытаюсь сделать :-
Я пытаюсь получить доступ к liked time of request.user
Продолжаю показывать :-
У объекта 'Likepost' нет атрибута 'request'
Я буду очень признателен за вашу помощь. Спасибо
Вы можете получить Likepost
объект пользователя, отфильтровав набор запросов, и попытаться получить соответствующий объект типа:
def blog_post_detail(request, post_id):
obj = get_object_or_404(Post, pk=post_id)
likepost = obj.likepost_set.filter(by_user=request.user).first()
context = {'obj':obj, 'likepost': likepost}
return render(request, 'blog_post_detail.html', context}
Далее вы можете отобразить это в шаблоне с помощью:
{% if likepost %}
Liked by you at {{ likepost.date_liked }}
{% endif %}
Обычно можно предотвратить несколько Likepost
для одного объекта и одного пользователя с помощью UniqueConstraint
[Django-doc]:
class Likepost(models.Model):
by_user = models.ForeignKey(User, on_delete=models.CASCADE)
post_of = models.ForeignKey(Post, on_delete=models.CASCADE)
date_liked = models.DateTimeField(auto_now_add=True)
class Meta:
constraints = [
models.UniqueConstraint(
fields=['by_user', 'post_of'],
name='like_once_per_post'
)
]
Если вы планируете хранить события типа "нравится" и "не нравится", вы получаете самую последнюю Like
модель с помощью:
def blog_post_detail(request, post_id):
obj = get_object_or_404(Post, pk=post_id)
likepost = obj.likepost_set.filter(by_user=request.user).order_by('-date_liked').first()
# …