Django - оператор If с request.user
У меня проблема с выражением if. Я просто хочу проверить на странице, является ли пользователь, который запрашивает страницу листинга, тем же самым пользователем, который выиграл листинг на этой странице.
Мое представление выглядит следующим образом:
def show_closed_listing(request, listing_id):
closed_listing = InactiveListing.objects.get(id=listing_id)
field_name = "winning_user"
winning_user = getattr(closed_listing,field_name)
message = False
print(request.user)
print(winning_user)
if request.user == winning_user:
print("This is good")
message = "You have won this listing!"
else:
print("Not good")
return render(request, "auctions/closed_listing.html", {
"closed_listing" : closed_listing,
"message" : message
})
Когда я захожу на страницу, авторизовавшись как Test2, когда Test2 выиграл листинг, мой терминал показывает следующее:
- Тест2
- Тест2
- Не хорошо
Я не понимаю, почему request.user и winning_user выглядят одинаково, но условие if ложно?
Если нужно, вот моя модель:
class InactiveListing(models.Model):
title = models.CharField(max_length=64)
description = models.CharField(max_length=512, default="")
winning_user = models.CharField(max_length=128)
winning_price = models.DecimalField(max_digits=6, decimal_places=2, default=0.01)
def __str__(self):
return self.title
winning_user
не является экземпляром User. Это может быть имя пользователя, или ID, или любое другое поле, но не User. Для этого вам понадобится ForeignKey.
Попробуйте сравнить:
winning_user == request.user.username: # Or winning_user == str(request.user) if you've edited the __str__ method like below.
Они выглядят одинаково, потому что я предполагаю, что у вас есть это в вашей пользовательской модели:
def __str__(self):
return self.username