2017-01-30 3 views
1

У меня есть 2 категории Мужчина и женщина, и я хочу, чтобы создать подкатегории и подключить его в продукте Это мой models.pyПодкатегория Джанго Магазин

class Category(models.Model): 
    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 __str__(self): 
     return self.name 


class Product(models.Model): 
    category = models.ForeignKey(Category, 
           related_name='products') 
    name = models.CharField(max_length=200, db_index=True) 
    slug = models.SlugField(max_length=200, db_index=True) 
    image = models.ImageField(upload_to='products/%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.DateField(auto_now_add=True) 
    update = models.DateField(auto_now=True) 

    class Meta: 
     ordering = ('name',) 
     index_together = (('id', 'slug'),) 

    def __str__(self): 
     return self.name 

Я думаю, что я могу создать этот класс

class Subcategory 
    name = models.CharField(max_length=200, 
          db_index=True) 
    slug = models.SlugField(max_length=200, 
          db_index=True, 
          unique=True) 
    category = models.ForeignKey(Category) 

и добавить его к классу продукта

subcategory = models.ForeignKey(Subcategory) 

, но я не думаю, что это хороший способ

ответ

1

Вы можете добавить parent_category поля для вашей модели категории, которая является внешним ключом к себе:

parent_category=models.ForeignKey('self', on_delete=models.CASCADE, null=True)

Тогда вы можете относиться к какой-либо категории, которая имеет parent_category как подкатегория.

Если вы хотите, чтобы продукт находился в более чем одной (дополнительной) категории, вам нужно будет сделать поле категории на вашей модели продукта полем ManyToMany вместо внешнего ключа. Если продукт может иметь не более одной категории и не более одной подкатегории, то вы можете оставить поле категории и подкатегории в своей модели продукта, но вам нужно будет установить related_name для каждого.

0

Вы можете создать дерево смежности из объектов категории, используя это поле (как упомянуто voodoo-burger), я также добавил blank = True, чтобы иметь возможность создавать корневую категорию в admin Django.

parent=models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True) 

Далее, если у вас есть много категорий и хотят делать запросы на вашу структуру дерева, вы должны смотреть на MPTT (https://github.com/django-mptt/django-mptt).

 Смежные вопросы

  • Нет связанных вопросов^_^