如何覆盖admin.ModelAdmin类从站点包?



我想在site-packages中覆盖一些模型的help_text。但是我显然不能只在包中更改它,因为在更新包和其他操作之后它不会被保存。

crontab = models.ForeignKey(
CrontabSchedule, on_delete=models.CASCADE, null=True, blank=True,
verbose_name=_('crontab'), help_text=_('Use one of interval/crontab'),
)

可能我必须创建一些应用程序和覆盖整个事情在admin.py,但我不确定这是一个很好的做法。

也有本地化的选择,但我仍然需要为此创建一个应用程序。

您可以创建单独的文件/文件夹

custom/admin.py

from django.contrib import admin
class CustomModelAdmin(admin.ModelAdmin):
# Override function/properties

然后在你的<app>/admin.py继承自定义类你已经创建了

from custom.admin import CustomModelAdmin
class ClassName(CustomModelAdmin):
# Your code
from django_celery_beat.models import PeriodicTask
PeriodicTask._meta.get_field('crontab').help_text = ('overriding text')

工作得很好。

另一种选择是在为模型注册自定义管理之前取消对模型的注册。
因此,实际上您不需要更改help_text,但是您可以创建一个自定义管理员,您可以根据自己的喜好对其进行操作。
它看起来像这样,以django_celery_beat.models.TaskResult为例:

[structure]
app/
admin/
init.py  # import your admin here to include it
...
taskresult.py
[...]

admin/taskresult.py

from django.contrib import admin
from django_celery_results.models import TaskResult
from app.admin.custom_filters import TaskResultFilter

admin.site.unregister(TaskResult)

@admin.register(TaskResult)
class TaskResultAdmin(admin.ModelAdmin):
"""
This admin is your oyster.
"""
pass

现在你有一个管理页面,您可以定制没有黑客原包,模型或者管理。

最新更新