Mira realmente depende mucho de los campos de los modelos.
En tu caso hay muchos campos repetidos. Ademas si quieres agregar algún nuevo tipo de animación como Anime tendrías que agregar mas modelos. Aquí mi solución es tener un modelo mas general ademas de agregarle un modelo extra llamado tipo que define si es una serie, una película, un anime, etc... (Ver código al final del post)
Ahora si tus modelos tuvieran información (campos) completamente diferente uno de otros pero por alguna razón quieres que todos esos modelos diferentes tengan un ID única en común que no colisione entre ellos entonces eso es una
relación polimorfica. Este tipo de relaciones generalmente se apegan muy bien a base de datos no relacionales NoSQL, un ejemplo clásico de este tipo de relaciones es modelar el inventario de un supermercado, donde todos los artículos tienen un o varios campos en común (como el precio, la cantidad o el nombre) y un ademas un campo en común y único (ej. el código de barras).
En ese tipo de relaciones SI puedes usar como dices el ContentType de django o
django_polymorphic
Código Python:
Ver originalclass AnimationType(models.Model):
""" modelo para tipo """
name = models.CharField(max_length=100, unique=True)
class Animation(models.Model):
""" modelo para series de tv, peliculas, anime y cualquier tipo de animacion """
type = models.ForeignKey(AnimationType)
title = models.CharField(max_length=100)
slug = models.SlugField()
body = models.TextField()
class AnimationInfo(models.Model):
""" modelo sobre información de las trailer,imagen..etc """
animation = models.ForeignKey(Animation)
trailer = models.TextField()
image = models.ImageField(upload_to="imagenes")
duration = models.IntegerField()
created_at = models.DateTimeField(auto_now=True)
class AnimationShare(models.Model):
""" Links sobre todo lo relacionado a la película, vendria como inline
en FilmInfo.
"""
info = models.ForeignKey(AnimationInfo)
link_information = models.URLField()
created_at = models.DateTimeField(auto_now=True)
updated_at = models.DateTimeField(auto_now_add=True)