我正在尝试在管理界面中显示manytomanyfield的内容。我有以下代码:
class Member(models.Model):
group = models.ManyToManyField('Group')
def group_gp_name(self):
return self.group.gp_name
def __unicode__(self):
return u'%s' % (self.id)
class Group(models.Model):
gp_name = models.TextField(verbose_name=u'Group Name')
def __unicode__(self):
return u'%s - %s' % (self.id, self.gp_name)
在管理员中我有这样的事情:
class MemberAdmin(admin.ModelAdmin):
list_display = ('group_gp_name')
此方法适用于显示Foreignkey数据。显然这不适用于ManytoManyFields ..所以我的问题是,如何在我的管理页面下显示我的组名。所以,当我点击“会员”的管理员时,我想立即看到由多人关系耦合的群组名称的内容?
UPDATE !!! - 我不想在我的更改页面中显示它们只是想在表格中看到结果。我发现了这个,这几乎是我想要的:
def get_sol(self):
return self.group.all()
这有效,但视图有点奇怪,它显示了这样的东西:
<Group: Administrators >]
问题是,我不想看到那些'[Group:'和'&gt;]',所以我该如何摆脱这些?
UPDATE2 !!!
它帮助了我,但如果发生这种情况怎么办?我有一个名为Test的第三个表就像这样:
class Test(models.Model):
member = models.ForeignKey('Member')
现在我想在管理视图'测试'中显示表'组'中的组名,这怎么可能?
感谢任何帮助。
此致 Ť
答案 0 :(得分:0)
如果您想在更改页面中看到多对多字段,则需要使用admin inlines。
class GroupInline(admin.TabularInline):
model = Group
class MemberAdmin(admin.ModelAdmin):
list_display = ('group_gp_name')
inlines = [
GroupInline,
]
发布您的更新,您对列表显示而不是更改页面感兴趣,请尝试将get_sol
更改为:
def get_sol(self):
return '; '.join([group.gp_name for group in self.group.all()])
发布第二次更新,在Test
上添加方法:
class Test(models.Model):
member = models.ForeignKey('Member')
def get_member_sol(self):
return self.member.get_sol()
答案 1 :(得分:0)
你不能那样使用它。因为ManyToManyFields创建一个intermadiate表来连接两个表。因此,组可能会返回多个结果。
def group_gp_name(self):
a = self.group.select_related()
# this will return you a list, so
return ','.join(x.gp_name for x in a)
这将返回由(,)
分隔的所有相关pg_name值更新:
class Test(models.Model):
member = models.ForeignKey('Member')
def get_gp_name(self):
','.join(x.gp_name for x in self.member.group.select_related())
由于msmber是一个外键,因此使用“。”时没有问题。使用外键关系的表示法。