Декоратор не работает над функцией просмотра в Django - PullRequest
0 голосов
/ 04 июля 2018

У меня есть два класса моделей: Продавец и Клиент , у которых есть однотонный ключ от Модель пользователя . Теперь у меня есть вид

@require_customer()
def add_to_wishlist(request, pk):
    product = Product.objects.get(pk=pk)
    customer = Customer.objects.get(user=request.user)
    wl = WishListProduct(product=product, customer=customer)
    wl.save()
    return HttpResponse("Added to Wish List !")

А Декоратор выглядит следующим образом:

def require_customer(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url='/login/'):
    def is_customer(u):
        return Customer.objects.filter(user=u).exists()
    actual_decorator = user_passes_test(lambda u: u.is_authenticated and is_customer, login_url=login_url,
    redirect_field_name=redirect_field_name)
    if function:
        return actual_decorator(function)
    else:
        return actual_decorator

Теперь, если я вошел в систему как владелец магазина, и я вызываю это представление со следующим URL:

path('products/<pk>/addToCart/', views.add_to_cart, name='add_to_cart'),

Он должен перенаправить на страницу входа, но вместо этого выдает ошибку как

OnlineShops.models.DoesNotExist: Customer matching query does not exist.

Можете ли вы помочь мне найти ошибку здесь?

1 Ответ

0 голосов
/ 04 июля 2018

Я думаю, ваша лямбда-функция

lambda u: u.is_authenticated and is_customer

должно выглядеть как

lambda u: u.is_authenticated and is_customer(u)

Эта опечатка может позволить не прошедшим проверку пользователям входить в ваше представление вместо перенаправления их на страницу входа.

Если это не решит проблему - пожалуйста, дайте нам весь трассировку, а не только текст исключения.

...