django 2.0如何显示过滤的产品列表

时间:2018-07-17 06:59:06

标签: django

我是python和django的新手。我正在尝试创建一个购物网站。我有几个类别,每个类别都有子类别。在主页上,当我单击某个类别时,我想查看仅与该类别相关的子类别。目前,我正在查看所有子类别的列表(不仅仅是一个类别的子类别,而是所有子类别)。请指导我如何实现这一目标。

我的models.py如下:

from django.db.models import CASCADE

class Category(models.Model):
     image = models.ImageField(upload_to='images/', blank=True)
     name = models.CharField(max_length=200, db_index=True)
     slug = models.SlugField(max_length=200, db_index=True, unique=True)

     class Meta:
        ordering = ('name',)
        verbose_name = 'category'
        verbose_name_plural = 'categories'

     def get_absolute_url(self):
         return '/category/{slug}/'.format(slug=self.slug)

     def __str__(self):
         return self.name

class Subcategory(models.Model):
     category = models.ForeignKey(Category, related_name='subcategory', on_delete=CASCADE)
     name = models.CharField(max_length=200, db_index=True)
     slug = models.SlugField(max_length=200, db_index=True, unique=True)

     class Meta:
         ordering = ('name',)
         verbose_name = 'subcategory'
         verbose_name_plural = 'subcategories'

     def __str__(self):
         return self.name

我的admin.py如下:

from django.contrib import admin
from .models import Category, Subcategory

admin.site.register(Category)


class SubcategoryAdmin(admin.ModelAdmin):
    list_display = ['__str__', 'slug']
    prepopulated_fields = {'slug':('name',)}
    class Meta:
        model = Subcategory

admin.site.register(Subcategory, SubcategoryAdmin)

我的views.py如下:

from django.views.generic import ListView
from .models import Category, Subcategory

class CategoryListView(ListView):
    queryset = Category.objects.all()
    template_name = 'category/home.html'

class SubcategoryListView(ListView):
    model = Subcategory
    queryset = Subcategory.objects.filter(name='Jeans')
    print(queryset)
    template_name = 'category/detail.html'

在上面的代码中,我试图使用名为Jeans的子类别名称进行过滤。但是我想要的是当我单击类别说Men时,我的网址将显示localhost:8000 / category / Men 所以我想在“男人”类别下显示所有子类别。我不知道该怎么实现。

我的urls.py(主要)如下:

from django.contrib import admin
from django.urls import path, include
from category.views import CategoryListView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', CategoryListView.as_view()),
    path('category/', CategoryListView.as_view()),
    path('category/', include('category.urls')),
]

category / urls.py如下:

from django.conf.urls import url
from .views import SubcategoryListView
urlpatterns = [
    url(r'^(?P<slug>[\w-]+)/$', SubcategoryListView.as_view()),
]

我的home.html如下:

{% for object in object_list %}

<a href="{{ object.get_absolute_url }}">{{ object.name }}</a></br>

{% endfor %}

我的detail.html如下:

{% for object in object_list %}

<a href="{{ object.get_absolute_url }}">{{ object.slug }}</a></br>

{% endfor %}

高度感谢所有帮助和指导。

1 个答案:

答案 0 :(得分:0)

您需要重写queryset方法,而不是在SubcategoryListView类中定义get_queryset属性。应该使用子弹按父类别进行过滤。

class SubcategoryListView(ListView):
    template_name = 'category/detail.html'

    def get_queryset(self):
        return Subcategory.objects.filter(category__slug=self.kwargs['slug])
相关问题