Вложенная категория в django - PullRequest
0 голосов
/ 29 марта 2020

как мне использовать вложенные категории в django

, как я должен django и делать это и найти некоторые решения, но ничего не получилось

class MainCategory(models.Model):
    name = models.CharField(max_length=50)
    date_created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name

class SubCategory(models.Model):
    perentcategory = models.ForeignKey(MainCategory, on_delete=models.CASCADE, null=True)
    name = models.CharField(max_length=50)
    date_created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name


class Items(models.Model):
    # maincategory = models.ForeignKey(MainCategory, on_delete=models.CASCADE)
    category = models.ForeignKey('self', on_delete=models.CASCADE, related_name='SubCategory')
    name = models.CharField(max_length=255)

Пожалуйста, поделитесь своими мыслями

Ответы [ 2 ]

0 голосов
/ 30 марта 2020
class Category(models.Model):
   parent_category = models.ForeignKey('self',related_name='child_category_list',on_delete=models.SET_NULL,blank=True,null=True)
   name            = models.CharField(max_length=255)
   path            = models.TextField(null=True,blank=True)


   def __str__(self):
       return self.path

   class Meta:
      verbose_name_plural = "Categories"

def pre_save_parent_category(sender,instance,**kwargs):
   instance.path = instance.name
   parent_category_obj = instance.parent_category
   while parent_category_obj is not None:
      instance.path = parent_category_obj.name + " > " + instance.path
      parent_category_obj = parent_category_obj.parent_category
0 голосов
/ 29 марта 2020

вам может понадобиться что-то вроде этого:

class Category(models.Model):
    name = models.CharField(max_length=50)
    parent = models.ForeignKey(
        'self', null=True, blank=True,
        related_name='children', on_delete=models.CASCADE
    )

    def save(self, *args, **kwargs):
        # prevent a category to be itself parent
        if self.id and self.parent and self.id == self.parent.id:
            self.parent = None
        super().save(*args, **kwargs)

, затем используйте это как:

class Product(models.Model):
    # ...
    categories = models.ManyToManyField(
        Category, related_name='products', blank=True
    )
...