您好我想根据模型状态禁用某些模型实例的编辑(在Django管理员中)。如果状态大于1,则将禁用编辑。我知道如何在左侧禁用该链接,但如果我设置了正确的URL,它仍然可以编辑,因此不欢迎此解决方案。
我的模特:
STATUS_CHOICES = (
(1, _(u'p')),
(2, _(u'w')),
(3, _(u'l')),
(4, _(u'p')),
)
class Ticket(models.Model):
author = models.ForeignKey(User, editable=False)
status = models.PositiveIntegerField(_('status'), choices=STATUS_CHOICES, default=1, editable=False)
答案 0 :(得分:8)
class MyModelAdmin(admin.ModelAdmin):
...
def has_change_permission(self, request, obj=None):
if obj is not None and obj.status > 1:
return False
return super(MyModelAdmin, self).has_change_permission(request, obj=obj)
答案 1 :(得分:0)
执行此操作的最简单方法如下。
1)在名为ticket_change_form.html
2)现在在模板文件中添加以下代码行
{% extends 'admin/change_form.html' %}
{% load admin_modify %}
{% block submit_buttons_bottom %}{% if not read_only %}{% submit_row %}{% endif %}{% endblock %}
3)接下来将此代码添加到您的admin.py文件中
class TicketAdmin(admin.ModelAdmin):
change_form_template = 'ticket_change_form.html'
def get_form(self, request, obj=None, **kwargs):
return TicketForm
def change_view(self, request, object_id, form_url='', extra_context=None):
ticket_object = #get your object here using object_id
context = {}
context.update(extra_context or {})
if not ticket_object.status:
context.update({'read_only': True})
return super(TicketAdmin, self).change_view(request, object_id, form_url=form_url,
extra_context=context)
这是最简单的方法。