【问题标题】:Customizing Django Admin Site自定义 Django 管理站点
【发布时间】:2019-08-18 11:06:18
【问题描述】:

我正在使用Django JET 构建一个应用程序,它本质上是 Django 管理站点上的一个皮肤。我需要为相关模型中的字段启用批量更新。所以最终我的问题是我该怎么做?

为了说明,我有两个模型:

from django.db import models


class Foo(models.Model):
    name = models.CharField(max_length=255)


class Bar(models.Model):
    CHOICES = (
        ('A', 'BEST'),
        ('B', 'GOOD'),
        ('C', 'WORST'),
    )

    name = models.CharField(max_length=255)
    quality = models.CharField(max_length=1, choices=CHOICES)
    foo = models.ForeignKey(Foo, on_delete=models.DO_NOTHING)

我还有一个父模型的管理员和一个相关模型的内联:

from django.contrib import admin

from admin_example import models


class BarInline(admin.StackedInline):
    model = models.Bar


@admin.register(models.Foo)
class FooAdmin(admin.ModelAdmin):
    inlines = (BarInline,)

我希望能够为与当前Foo 实例相关的所有Bar 实例批量更新quality。用户还必须能够单独编辑每个Barquality。我的想法是在BarInline 中添加一个<select> 下拉框。我已经考虑为BarInline 编写自己的模板。我该如何解决这个问题?

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    如果您想要添加 UI 功能,您可能需要查看template attribute for an InlineModelAdmin

    class BarInline(admin.StackedInline):
        model = models.Bar
        template = '/path/to/your/template.html'
    

    此模板负责渲染将要显示的所有单个Bar 对象集。你可能想看看默认的template for StackedInline

    【讨论】:

      【解决方案2】:

      假设您要bulk_updatebar 的所有实例,与foo 的特定实例相关且具有相同的quality 值。

      对于这种情况,更好的方法是将quality 属性移动到Foo 模型。这样,foo 的特定实例的每个bar 实例都可以访问quality 的相同值。

      如果通过管理员来更新 bar 的每个实例与 quality 的相同值是太多重复的工作。

      【讨论】:

      • 你如何回答主要问题customize django admin site
      • 感谢您的意见。但是,这不符合我最初的问题中提出的要求。每个Bar 实例必须有自己的quality,可以相互独立编辑。我正在实现一个 UI 功能,它允许用户批量编辑给定Foo 的所有Bar 实例的quality。之后,用户仍然可以编辑单个 Bar 实例。我的问题是关于自定义 django 管理站点以允许此工作流程。
      猜你喜欢
      • 2018-12-16
      • 1970-01-01
      • 2011-11-28
      • 2020-03-04
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      相关资源
      最近更新 更多