【发布时间】:2018-12-29 15:30:33
【问题描述】:
我是 django 的新手,大部分工作人员都在使用基于函数的视图。现在我需要将部分代码更改为基于类的代码,并且我已经堆叠了 2 天,因为找不到任何关于使用类实现类别的信息
所以我在views.py中的当前代码:
from django.shortcuts import render, get_object_or_404
from .models import Category, Product
def product_list(request, category_slug=None):
category = None
categories = Category.objects.all()
products = Product.objects.filter(available=True)
if category_slug:
category = get_object_or_404(Category, slug=category_slug)
products = Product.objects.filter(category=category)
context = {
'category': category,
'categories': categories,
'products': products
}
return render(request, 'shop/product/list.html', context)
这是我与类别相关的模型部分:
class Category(models.Model):
title = models.CharField(max_length=150, db_index=True)
slug = models.SlugField(blank=True, unique=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ('title',)
verbose_name = 'категория'
verbose_name_plural = 'категории'
def __str__(self):
return self.title
class Product(models.Model):
category = models.ForeignKey(Category, related_name='products', on_delete=models.CASCADE)
title = models.CharField(max_length=120)
slug = models.SlugField(blank=True, unique=True)
description = models.TextField(null=True)
price = models.DecimalField(max_digits=20, decimal_places=2, default=49.99)
image = models.ImageField(upload_to=upload_image_path, null=True, blank=True)
featured = models.BooleanField(default=False)
active = models.BooleanField(default=True)
timestamp = models.DateTimeField(auto_now_add=True)
如何将我的视图更改为基于类?
P.S 我需要将它与下一个 ListView 结合起来
class ProductListView(ListView):
template_name = 'products/list.html'
paginate_by = 6
def get_queryset(self, *args, **kwargs):
request = self.request
return Product.objects.all()
def get_context_data(self, *args, **kwargs):
context = super(ProductListView, self).get_context_data(*args, **kwargs)
cart_object, new_object = Cart.objects.new_or_get(self.request)
context['cart'] = cart_object
return context
【问题讨论】:
标签: django python-3.x django-models django-views django-class-based-views