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
Вернуться на верх