Проблемы обработки родовых отношений в Django - PullRequest
1 голос
/ 05 мая 2011

Я хочу смоделировать ситуацию, и у меня возникают реальные проблемы с ней. Домен выглядит следующим образом: есть сообщения, и каждое сообщение должно быть связано один с другим с 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="..."/>

Это правильный подход, он работает? Может ли шаблон быть независимым от объекта под ним?

1 Ответ

1 голос
/ 05 мая 2011

Ваш подход выглядит хорошо для меня.Вам просто нужно переопределить метод draw_item в ваших моделях изображений и видео.Ваш шаблон будет выглядеть примерно так:

{% for post in posts %}
  {{ post.media_content.draw_item }}
{% endfor %}

, и не имеет значения, на какую модель указывает общий внешний ключ, если в нем определен метод draw_item.

...