Время ожидания 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()
    # …
Вернуться на верх