【问题标题】:django display content of a manytomanyfielddjango 显示多字段的内容
【发布时间】:2010-12-30 15:58:16
【问题描述】:

我几天前才开始使用 django 框架,我迫切需要一些关于我的应用程序的帮助。

它由客户端、项目、管理员和管理员支付类组成,其中 admin_payment 包含管理员和项目的 ID 以及其他内容。

我的问题是如何在我的项目管理员列表中显示每个“项目”的“管理员姓名”?项目类本身不包含管理员 ID(Admin_Payment 包含)

目前我有以下结构:(精简)

models.py

class Admin(models.Model):
    admin_name = models.CharField(unique = True, blank = False, null = False, max_length = 128, verbose_name = u'admin full name')

    def __unicode__(self):
        return self.admin_name
    class Meta:
        ordering = ('id',)
        verbose_name = u'Admin Info'

class Project(models.Model):
    client = models.ForeignKey(Client, verbose_name = u'Client')
    description = models.ForeignKey(Description, verbose_name = u'project description')
    admins = models.ManyToManyField(Admin, verbose_name = u'Administrators', through = 'Admin_Payment')

class Admin_Payment(models.Model):
    admin = models.ForeignKey(Admin, verbose_name = u'Administrator')
    project = models.ForeignKey(Project, verbose_name = u'project')

admin.py(精简)

class AdminInline(admin.TabularInline):
    model = Admin

class ProjectAdmin(admin.ModelAdmin):
    radio_fields = {'position': admin.HORIZONTAL, 'solution': admin.HORIZONTAL}
    inlines = [AdminInline, ]
    list_display = ['client','description','admin_name']

客户和描述在项目列表中正确显示,但管理员名称不正确

任何帮助表示赞赏 (对不起,如果我发布了任何没有意义的内容,我是 python 和 django 的新手)

【问题讨论】:

    标签: django manytomanyfield


    【解决方案1】:

    django 默认不支持显示ManyToMany 字段的内容,因为每行结果都会查询数据库。你可以通过adding a method to your Project-model自己展示:

    class Project(models.Model):
        ....
        def admin_names(self):
            return ', '.join([a.admin_name for a in self.admins.all()])
        admin_names.short_description = "Admin Names"
    

    并将admin_names 放入您的list_display 字段中!

    【讨论】:

    • 非常感谢。知道如何为每个管理员添加过滤器吗?
    • 是否可以在返回值中添加verbose_name?
    • @Thordin9:我已经添加了适合您问题的答案,另外请参阅docs.djangoproject.com/en/dev/ref/contrib/admin/…的文档
    • 有用的答案。如果您想在模型上添加 __unicode__ 方法中的值而不重写它,请尝试:return ', '.join([str(a) for a in self.admins.all()])。如果你不使用__str__方法as stated on documentation,它工作正常。
    • 有没有办法在嵌套列表中显示这个集合?
    猜你喜欢
    • 1970-01-01
    • 2013-05-31
    • 2015-10-18
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多