Django:向管理后台暴露模型方法

5 投票
1 回答
2521 浏览
提问于 2025-04-16 03:36

示例模型:

class Contestant(models.Model):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
    email = models.EmailField()
    ...

    def send_registration_email(self):
        ...

我想把这个方法给管理员开放,这样管理人员就可以登录并手动调用它。我在考虑使用属性特性,但不确定这样是否可行。另外,像这样的方法是否可以开放给其他参数,而不仅仅是self,比如从选择中获取的相关对象之类的?

1 个回答

8

你可以把它注册为一个管理操作

from django.contrib import admin
from myapp.models import Contestant

def send_mail(modeladmin, request, queryset):
    for obj in queryset:
        obj.send_registration_email()

make_published.short_description = "Resend activation mails for selected users"

class ContestantAdmin(admin.ModelAdmin):
    list_display = [...]
    ordering = [...]
    actions = [send_mail]

admin.site.register(Contestant, ContestantAdmin)

撰写回答