как получить доступ к идентификаторам выбранных имен во многих отношениях django - PullRequest
0 голосов
/ 28 мая 2020

как получить доступ ко всем идентификаторам Language s через Programmer

class Language(models.Model):
    name = models.CharField(max_length=20)

class Programmer(models.Model):
    name = models.CharField(max_length=30)
    langs = models.ManyToManyField(Language,through='Level')

class Level(models.Model):
    language = models.ForeignKey(Language)
    programmer = models.ForeignKEy(Programmer)
    level = models.CharField(max_length=10)

Я пробовал эти способы, но никто не работал

в экземпляре Programmer: instance.level_set.language_id, instance.level.all.language_id, instance.level.all.language.id, а также пробовал это instance.level_set.language.id, все указанные программисты не имеют атрибутов, language, language_id и т. Д. Спасибо за любой совет

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Некоторые полезные вещи:

  • Чтобы получить все идентификаторы языка как итерируемые:
instance.langs.values_list('id', flat=True)
# <QuerySet [1, 5]>
  • Уровень и идентификатор языка в виде списка из 2- кортежи:
instance.level_set.values_list('language__id', 'level')
# <QuerySet [(1, 'advanced'), (5, 'beginner')]>
1 голос
/ 28 мая 2020

Вы должны попробовать следующее в экземпляре программиста

instance.langs.all()

для Language Instnace

instance.programmer_set.all()

django связь многие ко многим с дополнительными полями

- редактировать -

в вашей языковой модели определите функцию

def __str__(self):
    return self.id

...