在详细信息页面上更改django admin上的字段状态

时间:2019-12-08 12:57:15

标签: django django-admin

我是django管理员功能的新手。在我的联系人模型中,我有一个名为seen的BooleanField。在django默认管理员中,当用户进入联系人模型的详细信息页面时,我想更改seed的状态FalseTrue。但是我没有找到使用django admin的任何解决方案。

models.py

class Contact(models.Model):
    full_name = models.CharField(max_length=255)
    email = models.EmailField()
    sub = models.CharField(max_length=100)
    msg = models.TextField()
    seen = models.BooleanField(default=False)

admin.py

class ContactAdmin(admin.ModelAdmin):
   readonly_fields = ['full_name','email','sub','msg','seen']
   list_filter = ['seen']
   search_fields = ['full_name']

admin.site.register(Contact,ContactAdmin)

1 个答案:

答案 0 :(得分:1)

类似的事情应该起作用。覆盖详细信息视图的change_view方法。以下是django参考资料/文档,用于覆盖默认的管理员视图:https://docs.djangoproject.com/en/3.0/ref/contrib/admin/#other-methods

from django.shortcuts import get_object_or_404
...

class ContactAdmin(admin.ModelAdmin):
    readonly_fields = ['full_name','email','sub','msg','seen']
    list_filter = ['seen']
    search_fields = ['full_name']

    def change_view(self, request, object_id, form_url='', extra_context=None):
        contact = get_object_or_404(Contact, id=object_id)
        contact.seen = True
        contact.save()
        return super().change_view(
            request, object_id, form_url, extra_context=extra_context,
        )
admin.site.register(Contact,ContactAdmin)