首页 > 解决方案 > Django 'ProductDetailView' 对象没有属性 'user'

问题描述

为电子商务网站创建一个页面,允许用户将商品添加到他们的购物车。我在 ProductDetailView 中找不到对象用户时遇到问题。我将 get_context_data 函数覆盖到基于类的视图中,因此当他们访问特定产品页面时会调用它。

错误:

'ProductDetailView' object has no attribute 'user'

我假设这是因为视图看不到用户,因为它需要 user.objects.all()?

视图.py

from django.shortcuts import render, redirect
from django.shortcuts import render
from django.views.generic import CreateView, DetailView, ListView, RedirectView, UpdateView
from django.views import generic

from django.contrib.auth.decorators import login_required  # This is to block pages to non users using function views
from django.contrib.auth.mixins import LoginRequiredMixin
from .forms import ProductForm, ContactForm
from .models import Product, Contact
from checkout.models import OrderItem, Order
from users.models import User, Profile
# Create your views here.

class ProductDetailView(generic.DetailView):
    model = Product
    template_name = 'portal/product_detail.html'


    def get_context_data(request,  **kwargs):


        filtered_orders = Order.objects.filter(owner=request.user.user_profile, is_ordered=False)

    current_order_products = []
    if filtered_orders.exists():
        user_order = filtered_orders[0]
        user_order_items = user_order.items.all()
        current_order_products = [product.product for product in user_order_items]

    context = {
        'current_order_products': current_order_products
    }

    return context

标签: pythondjangorequest

解决方案


问题出在你的def get_context_data(request, **kwargs),你需要self作为第一个参数。您需要request从参数中删除并使用self.request它来访问它:

def get_context_data(self, **kwargs):

    filtered_orders = Order.objects.filter(owner=self.request.user.user_profile, is_ordered=False)

推荐阅读