我有这两个与ManyToManyField相关的模型:
class Bar(models.Model):
name = models.CharField(max_length=25, blank=False)
class Foo(models.Model):
bar = models.ManyToManyField(Bar, blank=True, related_name='bb')
def __unicode__(self):
return '%s' % self.bar.name
在管理页面中,我收到此错误:
Exception Type: AttributeError
Exception Value: 'ManyRelatedManager' object has no attribute 'name'
如何在 Foo 中访问 bar 的名称?我看到点符号无效。
答案 0 :(得分:1)
简短回答:你不能。
答案很长:您的问题“如何访问Foo中的栏名”意味着给定的Foo
实例始终只有一个且只有一个相关Bar
(不是零,不是两个,不是四十二,只是一个,但你使用的是ManyToManyField
,这意味着一个给定的Foo
实例可以有零个,一个或任何(正)个数相关的Bar
。在这种情况下,Foo.bar
解析为查询集,而不是单个Bar
实例,IOW
f = Foo()
f.bar.all()
相当于
f = Foo()
Bar.objects.filter(bb=f) # very weird related name FWIW
实际上在这种情况下,Foo.bar
会更好地命名为Foo.bars
(复数)。
如果您的目的是建立一对多的关系,其中每个Foo
只有一个Bar
而Bar
有多个Foo
,那么您需要{{1}相反。