如何访问多对多关系django中选定名称的ID
how to access to ids of selected names in manytomany relationship django
如何通过 Programmer
访问 Language
的所有 ID
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)
我试过这种方法,但没有人成功
in Programmer
instance : instance.level_set.language_id
, instance.level.all.language_id
, instance.level.all.language.id
也试过这个 instance.level_set.language.id
都说程序员没有属性,language
,language_id
等
感谢您的任何建议
您应该在程序员实例中尝试以下操作
instance.langs.all()
语言实例
instance.programmer_set.all()
django many to many relationship with extra fields
--编辑--
在你的语言模型下定义一个函数
def __str__(self):
return self.id
一些有用的东西:
- 获取所有语言 id 作为可迭代对象:
instance.langs.values_list('id', flat=True)
# <QuerySet [1, 5]>
- 作为二元组列表的级别和语言 ID:
instance.level_set.values_list('language__id', 'level')
# <QuerySet [(1, 'advanced'), (5, 'beginner')]>
如何通过 Programmer
Language
的所有 ID
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)
我试过这种方法,但没有人成功
in Programmer
instance : instance.level_set.language_id
, instance.level.all.language_id
, instance.level.all.language.id
也试过这个 instance.level_set.language.id
都说程序员没有属性,language
,language_id
等
感谢您的任何建议
您应该在程序员实例中尝试以下操作
instance.langs.all()
语言实例
instance.programmer_set.all()
django many to many relationship with extra fields
--编辑--
在你的语言模型下定义一个函数
def __str__(self):
return self.id
一些有用的东西:
- 获取所有语言 id 作为可迭代对象:
instance.langs.values_list('id', flat=True)
# <QuerySet [1, 5]>
- 作为二元组列表的级别和语言 ID:
instance.level_set.values_list('language__id', 'level')
# <QuerySet [(1, 'advanced'), (5, 'beginner')]>