【问题标题】:How to add a line number to each row of a tabularinline block如何将行号添加到 tabularinline 块的每一行
【发布时间】:2014-06-18 05:17:58
【问题描述】:

我有一个内联类型为 TabularInline 的 ModelAdmin 类。我想要的是 TabularInline 的每一行在其左侧显示一个行号。这个数字会随着新记录添加到内联中而增加,并会在编辑表单时显示。

我希望行号不是内联数据模型的一部分,而是在每次将新记录添加到内联块或由内联块显示时生成。我不需要将这个号码保存在数据库中。仅供 ModelAdmin 类中的其他字段参考。

我是 django 的新手,我似乎无法弄清楚如何做到这一点。

任何建议将不胜感激。

问候, 瑞克

【问题讨论】:

  • 您是否考虑过在前端使用一些 javascript 来执行此操作?
  • 我很惭愧地承认这一点,但我从 80 年代初开始就是一名专业的程序员,这是我需要编写的第一个 Web 应用程序。 Django、html、python 和 javscript 对我来说都是最近收购的,所以我不确定如何/在哪里实现 JS 代码。
  • 明白了。处理它的最快方法是创建一个 javascript 文件,然后将其包含在管理员中,如此处文档中定义的那样:docs.djangoproject.com/en/dev/ref/contrib/admin/…。使用 jQuery 将使您在前端的工作更加轻松,并且非常容易上手。 Django 实际上包含 jQuery,但它被包含为 django.jQuery。最后,您应该查看#django irc 频道。那里有很棒的帮助和支持来使用 Django。
  • 感谢您的指导。我现在就去思考!
  • 你能分享你的结果吗?

标签: django django-1.6 django-modeladmin


【解决方案1】:

您可以通过管理类使用类变量和返回行号的方法轻松地对现有内联进行编号:

class MyInlineAdmin(admin.TabularInline):
    line_numbering = 0
    fields = ('line_number', 'other_field')
    readonly_fields = ('line_number',)

    def line_number(self, obj):
        self.line_numbering += 1
        return self.line_numbering

    line_number.short_description = '#'

这将按照它们出现的顺序对任何内联进行编号,包括包含的任何额外(空白)内联。如果您通过“添加另一个”链接添加单个内联,它的行号将是正确的(从最后一个增加一个),但是如果您通过该链接添加多个内联,后续的仍将具有相同的行编号作为最后一个。

不完美,但总比没有好。

【讨论】:

  • 有时完美是行不通的。简单有效。不玩 row_number() (无论如何都会破坏过滤)。
猜你喜欢
  • 2022-11-01
  • 1970-01-01
  • 2020-10-19
  • 2016-11-13
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
相关资源
最近更新 更多