首页 > 解决方案 > 如何在 1 个帖子中选择具有多个子类别的多个父类别?

问题描述

我正在通过 Django 框架创建一个博客。
在博客中,我有一个帖子功能,我可以在管理页面的帖子中分配多个父母类别。

但是,我正在努力创建一个模型,该模型可以在管理页面的多个父类别下分配多个子类别。


例如,我有 2 个父母类别(汤姆和迈克)。
我在这些父母类别下有不同的子类别。

汤姆(父母类别
|- 这很好(发布 A)(子类别)
|- 这不好(发布 B)(子类别)

迈克(父母类别
|- 这很酷(发布 A)(子类别
|- This is not cool (to Post B)( Subcategory )

当用户选择 Parents 类别时,例如 Tom,用户可以看到每个 Post A 和 B 的子类别评论。
例如
Localhost:8000/TOM
显示帖子和评论相关的类别TOM
帖子 A - 这很酷
帖子 B - 这不酷

下面是我为帖子和父母类别创建的模型。
谁能告诉我如何创建我想要的子类别模型?
如果我的问题对您来说难以理解,请提前道歉。

from django.db import models


class Category(models.Model):
    name = models.CharField(max_length=20)
    description = models.TextField(default="")
    def __str__(self):
        return self.name


class Post(models.Model):
    title = models.CharField(max_length=255)
    body = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    last_modified = models.DateTimeField(auto_now=True)
    categories = models.ManyToManyField("Category", related_name="posts")
    url = models.CharField(max_length=200, unique=True, default='')
    image = models.ImageField(upload_to='images/', null=True)
    def __str__(self):
        return self.title

标签: django

解决方案


尝试像这样设计你的模型:

class Category(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField()
    parent = models.ForeignKey('self',blank=True, null=True ,related_name='children')

    class Meta:
        unique_together = ('slug', 'parent',) #enforcing that there can not be two categories under a parent with same slug
        verbose_name_plural = "categories"     

在此处查看实施类别和子类别的详细信息

参考和学分:https ://djangopy.org/how-to/how-to-implement-categories-in-django/


推荐阅读