Я хочу смоделировать ситуацию, и у меня возникают реальные проблемы с ней. Домен выглядит следующим образом: есть сообщения, и каждое сообщение должно быть связано один с другим с MediaContent. MediaContent может быть картинкой или видео (сейчас, может быть, музыка позже). Итак, что у меня есть:
mediacontents / models.py
class MediaContent(models.Model):
uploader = models.ForeignKey(User)
title = models.CharField(max_length=100)
created = models.DateTimeField(auto_now_add=True)
def draw_item(self):
pass
class Meta:
abstract = True
class Picture(MediaContent):
picture = models.ImageField(upload_to='pictures')
class Video(MediaContent):
identifier = models.CharField(max_length=30) #youtube id
сообщений / models.py
class Post(models.Model):
...
# link to MediaContent
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
media_content = generic.GenericForeignKey('content_type', 'object_id')
То, что я в конечном итоге хочу сделать, это возможность вызывать такие методы, как:
post1.media_content.draw_item()
>> <iframe src="youtube.com" ...>
post2.media_content.draw_item()
>> <img src="..."/>
Это правильный подход, он работает? Может ли шаблон быть независимым от объекта под ним?