Django Many-To-Many query relationship entity

Обновить

November 2018

Просмотры

189 раз

2

У меня есть следующие объекты:

  1. Видео
  2. Теги
  3. Отношения сущность - VideoTags

Вот схема:

class Tag(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100, unique=True)
    class Meta:
        db_table = u'tags'

class Video(models.Model):
    guid = models.CharField(max_length=36, primary_key=True)
    title = models.CharField(max_length=600)
    tags = models.ManyToManyField(Tag, through='VideoTag')
    class Meta:
        db_table = u'videos'

class VideoTag(models.Model):
    guid = models.CharField(max_length=36, primary_key=True)
    tag = models.ForeignKey(Tag)
    video = models.ForeignKey(Video)
    weight = models.FloatField()
    class Meta:
        db_table = u'video_tags'

Теперь, все это хорошо работает при создании объектов. Теперь предположим, что я хочу, чтобы тянуть видео по идентификатору и перебирать свои метки.

Когда я делаю:

video = Video.objects.get(pk=1)
tags = video.tags.all()

Я на самом деле список тегов сущностей, поскольку они связаны с видео и не отношения субъекта VideoTag. Я хотел бы получить доступ к тегам видеофайла и что более важно, один из дополнительных полей на столе отношений - вес. Я не могу этого сделать, так как свойство метки на видео имеет тип тегов.

Спасибо :)

1 ответы

0

В документации Django говорит

Если вам необходимо получить доступ к информации в членской Вы можете сделать это непосредственно запрашивая модель членства:

Он также говорит,

Другой способ получить доступ к той же информации, запрашивая многие-ко-многим обратную связь от объекта Person:

Таким образом, вы должны варианты, что-то вроде:

VideoTag.objects.filter(video=video).order_by('weight')

Или, может быть

Tag.videotag_set.all().order_by('weight')