Метод filter в блоке try не работает в django

У меня есть модель под названием properties, которая содержит данные о продукте с соответствующими идентификаторами пользователей. Идентификатор пользователя называется uid в модели.

Я написал функцию в views.py для получения товаров, которые публикуются только зарегистрированным пользователем. Я использую в ней метод filter, но он не работает. Как я могу это решить?

def view_products(request):
    try:
        user = request.user.id
        c = properties.objects.filter(uid=user,status=True)       
        return render(request,'view_products.html',{'c':c})
        
    except:
        txt = """<script>alert('You have no properties to view...');window.location='/userhome/';</script>"""
        return HttpResponse(txt)```

Насколько я знаю, AnonymousUser имеет поле id, которое может быть даже None, и если вы используете .filter(), это не вызывает исключения. Как вы хотите обработать логику исключения?

Вы должны написать так:

def view_products(request):
    if request.user.is_authenticated:
        user = request.user.id
        c = properties.objects.filter(uid=user, status=True)
        return render(request, 'view_products.html', {'c': c})
    txt = """<script>alert('You have no properties to view...');window.location='/userhome/';</script>"""
    return HttpResponse(txt)

is_authenticated - это флаг/свойство, где вы можете легко определить, аутентифицирован ли пользователь (вошел в систему) или нет.

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