自定义Django Admin Si

2024-09-29 08:15:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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。用户还必须能够分别编辑每个qualityBar。我的想法是将<select>下拉框添加到BarInline。我已经着手为BarInline编写自己的模板。我该如何处理这个问题?你知道吗


Tags: djangofrom模型importfooadminmodelsbar
2条回答

假设您想要bulk_update所有bar的实例,这些实例与foo的特定实例具有相同的值quality。你知道吗

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

如果通过admin更新每个bar实例,那么使用相同的quality值会重复太多的工作。你知道吗

如果您想添加一个UI特性,那么您可能想看看^{} attribute for an ^{}

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

此模板负责呈现将要显示的所有Bar对象集。您可能想看看默认的template for ^{}

相关问题 更多 >