【问题标题】:Remove add another from django admin从 django 管理员中删除添加另一个
【发布时间】:2017-12-18 08:43:28
【问题描述】:

我在 Django 管理员中有一个内联模型,它与父级有 OneToOneField 关系。

class Child(models.Model):
 parent = models.OneToOneField(Parent)
 received_on = models.DateField(null=True,)

在管理内联中我不想显示“添加另一个按钮”所以我做了这样的事情:-

class CampaignInfluencerShippingTrackingInline(admin.TabularInline):
    model = Child
    can_delete = False
    extra = 0
    fields = ['received_on']

    def has_add_permission(self, request):
         return False

但它仍然显示添加另一个按钮,问题在于与父级的关系,因为它具有 OneToOneField 如果我尝试使用 ForeignKey 使用相同的代码添加另一个按钮未显示但使用 OneToOneField 它总是显示。

谁能建议我它是如何工作的以及我可以做些什么来从内联子项中删除添加另一个按钮?

我可以在父级中添加内联模型,但我的问题与如何从内联模型中删除“添加另一个按钮”有关。

【问题讨论】:

  • 您需要从 django-admin 覆盖 template/admin/edit_inline/stacked.html 或 template/admin/edit_inline/tabular.html 以添加 template 文件夹(django-admin 文件夹的模板文件夹的精确副本)在您的文件夹中并覆盖具有该按钮代码的内部模板/html 文件。没有找到此更改的 django 文档。

标签: python django django-models django-admin


【解决方案1】:

只需添加max_num=0 或您想要的内容

class CampaignInfluencerShippingTrackingInline(admin.TabularInline):
    model = Child
    can_delete = False
    extra = 0
    max_num=0
    fields = ['received_on']

【讨论】:

    【解决方案2】:

    您希望用户能够使用内联精确地添加一个Child,对吗?这应该可以工作,然后:

    class CampaignInfluencerShippingTrackingInline(admin.TabularInline):
        model = Child
        can_delete = False
        fields = ['received_on']
    

    extra = 0 可能是你的绊脚石。当您包含它时,没有任何形式可见;只有内联的标题(“Childs”)、表格标题(“Received on”)和“Add another Child”链接。单击链接后,链接将消失并出现表单。因此,正如您所料,事实上,它仅限于一个孩子。

    【讨论】:

    • 我想从统一管理员中删除添加选项,只能使用 API 添加孩子。
    猜你喜欢
    • 2010-12-15
    • 2011-08-20
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多