Модели и связи в Django

Помогите, пожалуйста, разобраться. Я создаю учебный проект в Django. У меня должно быть три модели со связями: Language, Category, SubCategory. В схематическом виде это выглядело бы так:

  • Category: полнофункциональные
    • SubCategory: объектно-ориентированный
      • Language: Python
      • Language: C#
      • Language: <...>
    • SubCategory: мультипарадигмальный
      • Language: Python
      • Language: Rust
      • Language: <...>
    • SubCategory: стуктурный
    • SubCategory: <...>
  • Category: неполнофункциональные
    • SubCategory: языки СУБД
    • SubCategory: SQL
      • Language: PL/SQL
    • SubCategory: <...>
  • Category: <...>
    • SubCategory: <...>
      • Language: <...>
  • Category: <...>
    • SubCategory: <...>
      • Language: <...>

В models.py я создала такие модели: Language со связью ManyToMany(SubCategory), SubCategory со связью ForeignKey(Category), Category. Я подразумеваю, что у любого языка может быть множество subcategory, но только одна category. Правильно ли я реализовала связи? Я не понимаю как мне теперь получить по названию языка SubCategory. Файл models.py

    from django.db import models
    from django.urls import reverse
    
    
    class Language(models.Model):
        title = models.CharField(max_length=255)
        content = models.TextField(blank=True)
        icon = models.ImageField(upload_to="media/")
        category = models.ManyToManyField('SubCategory', blank=True)
    
        def __str__(self):
            return self.title
    
        def get_absolute_url(self):
            return reverse('descriptions_idx', kwargs={'idx': self.pk})
    
    
    class Category(models.Model):
        name = models.CharField(max_length=100, db_index=True)
    
        def __str__(self):
            return self.name
    
    
    class SubCategory(models.Model):
        name = models.CharField(max_length=100, db_index=True)
        cat = models.ForeignKey('Category', on_delete=models.PROTECT, null=True)
    
        def __str__(self):
            return self.name
Вернуться на верх