Создавайте таблицы "video" и "videolist", например YouTube, используя Django - PullRequest
0 голосов
/ 12 января 2012

Я создаю приложение с таблицами видео "и" списком видео ", например YouTube, используя Django.

Теперь я создаю таблицы "Видео" и "Курс (это список видео)". Я хочу добавить одно видео в несколько разных списков и искать по списку и видео, поэтому пусть таблица курса имеет ссылку на поле ManyToMany на таблицу видео.

Но при этом у меня возникают трудности с порядком следования видео в списке. Чтобы отображать видео в том порядке, в котором я зарегистрировался, и исправлять его в любое время после этого, поле ManyToMany должно иметь что-то вроде «id» при регистрации, верно?

Я новичок в Python и Django, так что может быть какой-то типичный способ ... Есть ли хорошие способы справиться с этим?

1 Ответ

0 голосов
/ 12 января 2012

Вы делаете это путем создания собственной промежуточной модели (вместо использования неявной модели, созданной Django):

class Video(models.Model):
    ...

class Course(models.Model):
    ...
    videos = models.ManyToManyField(Video, through='CourseVideo', related_name='courses')

class CourseVideo(models.Model):
    class Meta:
        ordering = ['order']

    course = models.ForeignKey(Course)
    video = models.ForeignKey(Video)
    order = models.PositiveIntegerField(default=0)

Важной частью выше является атрибут through в ManyToManyField.Это говорит Django использовать модель CourseVideo, которую вы определили вместо собственной неявной версии.

Однако при этом есть несколько ошибок.Вы больше не можете использовать такие вещи, как some_course.videos.add(video), потому что теперь необходима дополнительная информация для создания этих отношений.Вместо этого вам нужно явно создать связь:

CourseVideo.objects.create(course=some_course, video=some_video, order=1)

Более подробную информацию смотрите в документации: https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...