Как правильно создать подкатегории для категории в Django при описании моделей?

Как настроить модели в models.py для создания категорий и подкатегорий книг, чтобы можно было указывать подкатегории для книг, относящихся к выбранным категориям? Как добавить выбор подкатегорий для книги через административную панель Django? <br/> <br/> Попытка решения: <br/> <pre><code class="python">from django.db import models

class Subcategory(models.Model):
    title = models.TextField()

class Category(models.Model):
    title = models.TextField()
    subcategories = models.ManyToManyField(Subcategory, blank=True)

    def __str__(self):
        return self.title

class Author(models.Model):
    name = models.TextField()

    def __str__(self):
      return self.name

class Book(models.Model):
    title = models.TextField()
    isbn = models.TextField(null=True, blank=True)
    pagecount = models.IntegerField(null=True, blank=True)
    publisheddate = models.TextField(null=True, blank=True)
    thumbnailurl = models.TextField(null=True, blank=True)
    shortdescription = models.TextField(null=True, blank=True)
    longdescription = models.TextField(null=True, blank=True)
    status = models.TextField(blank=True)
    authors = models.ManyToManyField(Author, blank=True)
    categories = models.ManyToManyField(Category, blank=True)
    subcategories = models.ManyToManyField(Subcategory, blank=True)

    def __str__(self):
        return self.title

class FeedBack(models.Model):
    email = models.EmailField(blank=True)
    name = models.TextField(blank=True)
    comment = models.TextField(blank=True)
    phone = models.TextField(blank=True)
  • 19 марта 2024 г. 14:49
Ответы на вопрос 2

Для создания подкатегорий для категории в Django при описании моделей, вы можете использовать ManyToManyField для связи между категорией и подкатегорией. 

В вашем случае, модели могут быть описаны следующим образом:

```python
from django.db import models

class Category(models.Model):
    title = models.CharField(max_length=100)

    def __str__(self):
        return self.title

class Subcategory(models.Model):
    title = models.CharField(max_length=100)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='subcategories')

    def __str__(self):
        return self.title

class Book(models.Model):
    title = models.CharField(max_length=100)
    categories = models.ManyToManyField(Category)
    subcategories = models.ManyToManyField(Subcategory)
    
    def __str__(self):
        return self.title
```

Чтобы добавить выбор подкатегорий для книги через административную панель Django, вам необходимо зарегистрировать модели в административном разделе. 

```python
from django.contrib import admin
from .models import Category, Subcategory, Book

admin.site.register(Category)
admin.site.register(Subcategory)
admin.site.register(Book)
```

После этого вы сможете добавлять, редактировать и удалять категории, подкатегории и книги через административную панель Django. Выбор подкатегорий для книги будет осуществляться через соответствующие интерфейсы в административной панели.
Примерно как-то так: 

class Category(models.Model):
    title = models.TextField()
    category = models.ForeignKey(
        'self', on_delete=models.CASCADE, null=True, blank=True, related_name='subcategories'
    )

    def __str__(self):
        return self.title
Похожие вопросы