我能够显示分类模型(男人和女人)的类别。 现在我想使用子类别转发类别到站点,其中将显示带有产品的子类别
这是我的models.py
class Category(models.Model):
name = models.CharField(max_length=200,
db_index=True)
slug = models.SlugField(max_length=200,
db_index=True)
class Meta:
ordering = ('name',)
verbose_name = 'category'
verbose_name_plural = 'categories'
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('shop:product_list_by_category',
args=[self.slug])
class SubcategoryMan(models.Model):
category = models.ForeignKey(Category,
related_name='subcategorymans')
name = models.CharField(max_length=200,
db_index=True)
slug = models.SlugField(max_length=200,
db_index=True)
def __str__(self):
return self.name
class ProductMan(models.Model):
category = models.ForeignKey(SubcategoryMan,
related_name='productsman')
name = models.CharField(max_length=200,
db_index=True)
slug = models.SlugField(max_length=200,
db_index=True)
image = models.ImageField(upload_to='productsman/%Y/%m/%d',
blank=True)
description = models.TextField(blank=True)
price = models.DecimalField(max_digits=10, decimal_places=2)
stock = models.PositiveIntegerField()
available = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
ordering = ('name',)
index_together = (('id', 'slug'),)
def __str__(self):
return self.name
这是我的ciews.py
def product_list(request, category_slug=None):
category = None
categories = Category.objects.all()
products = ProductMan.objects.filter(available=True)
if category_slug:
category = get_object_or_404(Category, slug=category_slug)
products = products.filter(category=category)
return render(request,
'shop/product/list.html',
{'category': category,
'categories': categories,
'products': products})
这是我的网址(在应用商店中)
urlpatterns = [
url(r'^$', views.product_list, name='product_list'),
url(r'^(?P<category_slug>[-\w]+)/$',
views.product_list,
name='product_list_by_category')
]
这是我的list.html
{% extends "shop/base.html" %}
{% load static %}
{% block content %}
<ul>
<li>
<a href="{% url 'shop:product_list' %}">Wszystkie</a>
</li>
{% for c in categories %}
<li>
<a href="{{c.get_absolute_url}}">{{c.name}}</a>
</li>
{% endfor %}
</ul>
{% endblock %}
我知道我必须创建网址并查看详细信息,并显示产品但现在我想知道我可以做什么来创建转发到子类别(创建视图和网址?)
答案 0 :(得分:2)
我有男人和女人的类别。我希望当我点击Man转发到具有子类别(T恤,短裤等)的新站点时
这不是发生的事情。您的django应用程序不会主动转发客户端。实际上服务器无法向客户端发送命令。 (好吧实际上有方法,但在你的用例中你不需要这个。)
当客户端点击您呈现到上一个响应中的链接时,将请求新页面。单击该类别的信息位于URL中。 Django根据url将请求委托给正确的视图以呈现另一个模板。 您已经定义了网址。现在您需要一个视图和一个模板。服务器和客户端之间的连接是无状态的。这意味着您的django不知道或不跟踪客户端打开的网站。它只是回答每一个请求
django tutorial涵盖完成此操作所需的所有代码。
附注:
您没有将类别和产品拆分为每个性别的单独模型。您可以使用字段Product
创建模型gender
,这样您就可以过滤每个&#34; man类别&#34;关于这个领域的内容。像这样:
GENDER_CHOICES = (
('man', 'man'),
('woman', 'woman'),
('kids'), 'kids'), # yeah that's not a gender but you could want to have this
)
class Product(models.Model):
category = models.ForeignKey(Category, related_name='product')
name = models.CharField(max_length=200, db_index=True)
# all the other product fields
gender = models.CharField(max_length=30, choices=GENDER_CHOICES)
如果您只想查看视图中的man产品,则可以按照以下方式对其进行过滤:
man_products = Product.objects.filter(gender='man')
或者这个:
# get all men's shoes from the database
man_shoes = Product.object.filter(gender='man', category__slug='shoes')