Как вычесть из модели Django?

Я пытаюсь прибавлять и вычитать 1 из значения IntegerField модели Django и отображать его на веб-странице в зависимости от нажатия кнопки.

models.py

class User(AbstractUser):
    following = models.ManyToManyField("self", related_name="followers", symmetrical=False)
    following_num = models.IntegerField(default=0)

В views.py:

Добавить: following_num = page_visitor.following_num +1

Вычесть: following_num = page_visitor.following_num -1

Это отображается в html там, где должно отображаться число:

<django.db.models.query_utils.DeferredAttribute object at 0x0000022868D735E0>

весь вид:

def username(request, user):
    #get user
    user = get_object_or_404(User.objects, username=user)
    posts = Post.objects.filter(user=user).order_by('-date_and_time')
    page_visitor = get_object_or_404(User.objects, username=request.user)

    if user == request.user:
        followButton = False
    else:
        followButton = True

    if request.method == "POST":
        if "follow" in request.POST:
            request.user.following.add(user)
            following_num = page_visitor.following_num +1
            #following_num = F('User.following_num') + 1

        elif "unfollow" in request.POST:
            request.user.following.remove(user)
            following_num = page_visitor.following_num -1
            #following_num = F('User.following_num') - 1

    followers_num = page_visitor.following_num
    following_num = User.following_num
    return render(request, "network/username.html",{
        "user": user,
        "posts": posts,
        "followButton": followButton,
        "followers": followers_num,
        "following": following_num
    })

Без html, который должен отображать число, я не могу сказать, почему он отображает это, но если вы собираетесь изменить следующее число, то вам нужно вызвать page_visitor.save() после изменения свойства page_visitor, чтобы он сохранил новое значение свойства в базе данных

вы ссылаетесь на класс (модель), а не на объект (экземпляр)

following_num = User.following_num

поскольку вы уже передали объект пользователя в шаблон, вы также можете получить доступ к атрибутам напрямую {{user.following_num }} {{request.user.following_num }}

но лучше переименовать переданную пользовательскую переменную, чтобы избежать путаницы/ошибок

Получение информации о пользователе в шаблонах django

Вернуться на верх