Как вычесть из модели 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 }}
но лучше переименовать переданную пользовательскую переменную, чтобы избежать путаницы/ошибок