1

Я смог показать категории для Категория Модель (Мужчина и Женщина). Теперь я хочу сделать переадресацию категории на сайте с подкатегории, где будут показывать подкатегорию с продуктомDjango Категории с подкатегориями

Это мой 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') 
] 

и это мой ли st.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 %} 

Я знаю, что я должен создать URL и вид на деталь, и показать продукт, но теперь я хочу знать, что я могу сделать, создающую переадресацию на подкатегорию (создать вид и URL?)

+0

Можете ли вы объяснить более подробные, что вам означает «создать переадресацию в подкатегорию»? – trixn

+0

@trixn У меня есть категория Мужчины и женщины. Я хочу, когда я нажму «Переадресация человека» на новый сайт с подкатегорией (футболка, шорты и т. Д.) – KeepItSick

ответ

1

У меня есть категория Мужчины и женщины. Я хочу, когда я нажму «Переадресация человека» на новый сайт с подкатегорией (футболка, шорты и т. Д.)

Это не то, что происходит. Приложение django не активно продвигает клиента. Фактически нет способа, которым сервер может отправлять команды клиенту. (На самом деле есть способы, но вам это не нужно в вашем случае использования.)

Когда клиент нажимает на ссылку, которую вы передали в предыдущий ответ, будет запрошена новая страница. Информация, которая была нажата, указана в URL-адресе. Делегаты Django, которые запрашивают правильное представление в зависимости от URL-адреса для отображения другого шаблона. Вы уже определили URL. Теперь вам нужно представление и шаблон. Соединение между сервером и клиентом является безстоящим. Это означает, что ваш джанго не знает и не отслеживает, какой сайт открыл клиент. Он просто отвечает на каждый запрос

django tutorial охватывает весь код, необходимый для выполнения именно этого.

Примечание стороны: Вы не не разделить ваши категории и продукты на отдельные модели для каждого пола. Вы можете просто создать модель Product с полем gender, которое позволит вам фильтровать каждую «мужскую категорию» по содержанию этого поля. Как это:

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_products = Product.objects.filter(gender='man') 

или это:

# get all men's shoes from the database 
man_shoes = Product.object.filter(gender='man', category__slug='shoes') 
Смежные вопросы