@vadiculus

Как получить наследуемую модель Django без перебора вариантов?

Я делаю сайт где есть модели проектов разных типов которые наследуются от одного проекта
class Project(models.Model):
    title = models.CharField(max_length=50, verbose_name='Название')
    slug = models.SlugField(verbose_name='Slug')
    content = models.TextField(verbose_name='Контент')
    image = models.ImageField(null=True, blank=True,upload_to='images/%Y/%m/%d', verbose_name='Изображение')
    tags = TaggableManager()
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

class Audio(Project):
    file = models.FileField(upload_to='audio/%Y/%m/%d', verbose_name='Аудио Файл')

class Game(Project):
    background_image = models.ImageField(upload_to='images/%Y/%m/%d', verbose_name='Изображение для страницы')
    url = models.URLField(null=True, blank=True, verbose_name='URL')
    yt_urls = models.URLField(null=True, blank=True, verbose_name='YouTube URL')

#И т.д.


И я делаю контроллер который дает модель проекта и мне нужно получить основную модель Game или Audio а не модель Project

def project_detail(request, rubric_slug, project_slug):
    if rubric_slug == 'games':
        project = Project.objects.get(slug=project_slug).game
        return render(request, 'posts/game-detail.html', {'project': project})
    elif rubric_slug == 'audio':
        project = Project.objects.get(slug=project_slug).audio
        return render(request, 'posts/audio-detail.html', {'project': project})
    elif rubric_slug == 'movies':
        project = Project.objects.get(slug=project_slug).movie
        return render(request, 'posts/movie-detail.html', {'project': project})
    elif rubric_slug == 'blogs':
        project = Project.objects.get(slug=project_slug).blog
        return render(request, 'posts/blog-detail.html', {'project': project})


Не хочу перебирать каждый тип проекта отдельно
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
@maksam07
Не совсем понимаю, откуда у модели "проект" ключ: игра, аудио и т.д.?

Скорее всего вам нужно переписать под расширение базовой модели, типа так: https://docs.djangoproject.com/en/4.1/topics/db/mo...
И потом уже вьюху переписывать

Могу, конечно, и ошибаться. Возможно я сам что-то упустил из вашего кода
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы