自定义Django管理网站

时间:2019-03-27 19:01:32

标签: python django django-admin

我正在使用Django JET构建应用程序,该应用程序实际上是Django Admin网站上的皮肤。我需要为相关模型中的字段启用批更新。所以最终我的问题是我该怎么做?

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

input = DataFrame({'A': [1, 2], 'B': [['a', 'b'], 'c']})
listA=input.A.tolist()
listB=input.B.tolist()
count_sublist_len=[len(ele) for ele in listB if type(ele)==list else 1]
# create similar list for A
new_listA=[count_sublist_len[i]*[listA[i]] for i in range(len(listA)]
# flatten them
f_A=[item for sublist in new_listA for item in sublist]
f_B=[item for sublist in listB for item in sublist]
df_new=pd.DataFrame({'A':f_A,'B':f_b})

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

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,) 实例相关的所有quality实例批量更新Bar。用户仍然必须能够分别为每个Foo编辑quality。我的想法是向Bar添加一个<select>下拉框。我已经考虑为BarInline编写自己的模板。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

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

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

如果通过管理员完成,以相同的bar值来更新quality的每个实例,则会导致重复工作过多。

答案 1 :(得分:0)

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

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

此模板负责呈现将要显示的所有单个Bar对象集。您可能需要查看默认的template for StackedInline