django 对于带有关键字参数'' products_po_category '的'products_category',请反向操作:〈QuerySet [〈Product:迈巴赫>]>}'未找到

xytpbqjk  于 2023-03-24  发布在  Go
关注(0)|答案(1)|浏览(98)

您好,我需要实现以下内容:我有一个类别选择的形式,并根据选定的类别,我需要重定向用户到一个页面与此类别的产品。
URLS.PY

from django.urls import path
from first.views import productsHTML, productHTML, products_category

urlpatterns = [

    path("products_category", products_category, name = "products_category"),
    path("productsHTML/<str:uuid>", productHTML, name = "productHTML"),
    path("productsHTML/", productsHTML, name = "productsHTML"),

]

VIEWS.PY

from django.shortcuts import render, redirect

from .models import Product
from .forms import CategoryChoice

def productsHTML(request):
    form = CategoryChoice(request.POST or None)
    if request.method == 'POST' and form.is_valid():
        category = form.cleaned_data['category']
        products_po_category = Product.objects.filter(category=category)
        
        return redirect('products_category', products_po_category=products_po_category, permanent=True)
    all_products = Product.objects.all()
    context = {
        'form': form,
        'products': all_products,
    }
    return render(request, "products.html", context) 

def products_category(request,products_po_category):
    context = {
        "products_po_category": products_po_category
    }
    return render(request, "product_category.html", context)

通过form.cleaned_data ['category'],我获得了关于所选类别的数据,然后通过Product.objects.filter(category=category),我获得了该类别的对象,在所有这些之后,我重定向到包含该类别产品的页面,传递所选类别的对象列表。
FORMS.PY

from django import forms

from .models import Product

class CategoryChoice(forms.ModelForm):
    class Meta:
        model = Product
        fields = ('category',)
        widgets = {
            'category': forms.Select(),
        }

错误的全文:对于带有关键字参数'' products_po_category '的'products_category',请反向操作:〈QuerySet [〈Product:Maybach〉]〉}'未找到。已尝试1个模式:['products_category\Z']
我将很高兴为任何帮助!如果您需要更多的信息,我准备提供。谢谢。

1hdlvixo

1hdlvixo1#

products_categoryurl没有参数。

您创建视图的方式不对,请在productsHTML视图中使用category_id参数重定向,并在products_category视图中过滤产品。
您的productsHTML会喜欢这个:

def productsHTML(request):
    form = CategoryChoice(request.POST or None)
    if request.method == 'POST' and form.is_valid():
        category = form.cleaned_data['category']
        return redirect('products_category', category_id=category_id, permanent=True)
    all_products = Product.objects.all()
    context = {
        'form': form,
        'products': all_products,
    }
    return render(request, "products.html", context)

products_category视图将是:

def products_category(request,category_id):
    products_po_category = Product.objects.filter(category_id=category_id)
    context = {
        "products_po_category": products_po_category
    }
    return render(request, "product_category.html", context)

urls.py将是:

urlpatterns = [
    path("products_category/<int:category_id>/", products_category, name = "products_category"),
    path("productsHTML/<str:uuid>/", productHTML, name = "productHTML"),
    path("productsHTML/", productsHTML, name = "productsHTML"),
]

试试这个代码。

相关问题