【问题标题】:Django : admin hide add buttonDjango:管理员隐藏添加按钮
【发布时间】:2015-03-27 04:42:53
【问题描述】:

是否可以隐藏“添加另一个”链接但保留“保存并继续编辑”按钮以添加其他行?

【问题讨论】:

  • 是的,有可能。您需要自定义 Django 管理模板。检查此链接:How to override and extend django admin templatesDjango Admin: Custom template for a model
  • 我已经使用名为 base_site.html 的模板自定义了管理员
  • 这个模板的路径是什么?它必须是 'templates/admin/base_site.html
  • 这是另一个名为 admin 的文件。文件路径:templates/material/admin/base_site.html。 model.py、forms.py...在材料中
  • @andree 你在找submit_line.html 吗?

标签: django button admin add


【解决方案1】:

您的问题不是很具体,但有一些方法可以在不弄乱模板的情况下改变管理员的行为。

就我而言,我想强制用户先创建父模型,然后再将对象添加到内联。这样做是这样的:

class SomethingInline(admin.TabularInline):
    model = Something
    extra = 0
    ...
    def get_max_num(self, request, obj=None, **kwargs):
        max = super(SomethingInline, self).get_max_num(request, obj, **kwargs)
        if obj:
            return max
        return 0

您可以使用类似于动态限制max_num 的东西。一旦内联达到max_num 行数,“添加另一个”按钮将被禁用。因此,如果您将 max_num 动态设置为 +1 当前内联对象的数量,则用户只能在保存前一次添加一个。

在这个例子中,你可以这样做:

    def get_max_num(self, request, obj=None, **kwargs):
        if obj:
            max = obj.something_set.count() + 1
        else:
            max = 1
        return max

【讨论】:

  • 我有麻烦..with : 动态限制 max_num。将 max_num 动态设置为 +1 是什么意思?
  • 您是在 Inline 类中定义 get_max_num 方法,对吗?
  • 我的意思是在我的问题中如何隐藏在管理员内联动态链接“添加另一个”(它不是一个按钮)。在 css 文件中输入 [name="_addanother"] { display: none; } 不工作
  • 我明白了。我是说 Django 可以控制是否从 admin.py 代码显示该链接,而无需触摸模板或站点的 CSS。这是通过调整max_num 属性来完成的,在此处的文档中有详细说明:docs.djangoproject.com/en/1.7/ref/contrib/admin/… 我的回答还允许您根据需要动态定义max_num。一旦 Inline 中的行数达到max_num,“添加另一个”链接将自动从视图中删除。
【解决方案2】:

InlineModelAdmin.extraInlineModelAdmin.max_numInlineModelAdmin.min_numInlineModelAdmin.get_max_num()https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin.max_num 应该足以获得您想要的任何行为。

将 max_num 设置为 0。将禁用添加新对象。

class ItemInline(admin.TabularInline):
    model = Item
    max_num = 0

将 extra 设置为 1,将 max_num 设置为 3。这将给出一个新行。还有一个添加按钮,当添加 3 个项目时会消失。

class ItemInline(admin.TabularInline):
    model = Item
    extra = 1
    max_num = 3

玩弄它以获得所需的行为。

【讨论】:

  • 那行不通。如果 extra=1,我有一个新行。如果 extra=1 和 max_num=3 或 max_num=2....我没有新行并且“添加另一个”被隐藏
  • 像其他答案一样。如何在您的情况下完全正确并不是重点。这些答案仅向您展示如何解决您的问题。提出更好的问题并获得更好的答案。那么,确切的预期行为是什么?
  • 我只想有两个空行(或三个)而没有看到“添加另一个”链接。如果我想在数据输入后记录这些新行,我单击“保存”或“保存并继续编辑”并添加两个新的空行(或三个)。 “添加另一个”永远不会出现。对不起,如果我不清楚
  • 没问题。将 max_num 和 extra 设置为相同的值应该可以解决问题。所以 2 或 3。只要它们相同,就不应该有添加另一个按钮。你对 1.4 没问题。见docs.djangoproject.com/en/1.4/ref/contrib/admin/…
  • 我找到了解决方案,在媒体类中有一个css文件:.inline-related tr.add-row a { display: none; }
【解决方案3】:

我找到了解决方案,在媒体类中有一个 css 文件:

class Essai_TemperatureInline(admin.TabularInline):

model = Essai_Temperature
extra= 2

class Media:
    css = { "all" : ("/static/css/java.css",) }

和css文件:

.inline-related tr.add-row a { display: none; }

为什么所有这些复杂的答案?

【讨论】:

  • @Patrice,因为 CSS 不会保护您免受恶意用户的侵害。表单验证,即get_max_num() 将。
猜你喜欢
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 2015-07-16
  • 2011-06-02
  • 2014-10-21
  • 1970-01-01
  • 2019-05-19
相关资源
最近更新 更多