假设我有一个带有cms占位符的模型:
class Content(models.Model):
placeholder = PlaceholderField('placeholder')
published = models.BooleanField(default=False)
我想使占位符前端可编辑,这取决于它是否已发布。i、 我希望它可以通过前端编辑,只要它是未发布的,但一旦占位符已经发布,我希望它是不可编辑的。你知道吗
我试过以下方法管理员.py地址:
class ContentAdmin(admin.ModelAdmin):
def has_change_permission(self, request, obj=None):
if obj.published:
return False
else:
return True
admin.site.register(Content, ContentAdmin)
但似乎没有任何效果。我也尝试过使用自定义后端。你知道吗
def has_perm(self, user_obj, perm, obj=None):
if isinstance(obj, Content):
if obj.published:
return False
else:
return True
return False
而且,没有效果。我没有得到任何错误,但占位符继续呈现为可编辑。我做错什么了?我目前正在和管理员一起测试,是不是我不能拒绝超级用户权限?你知道吗
使用django 1.6.1和django cms 3.0.12
谢谢!你知道吗
您可以重写
ContentAdmin
中的get_readonly_fields
,以检查内容对象是否已发布,并相应地将placeholder
设置为只读。你知道吗更新:
admin
readonly
只影响Django admin。你知道吗您可以override the model's ^{} method 并检查
placeholder
是否是更新字段之一。如果是,并且Content
实例已发布,它将什么也不做。你知道吗这将忽略提供给前端中
placeholder
字段的任何新值。你知道吗在前端,您可以保持原样,只需进行此更改。(该字段仍将显示为可编辑,尽管编辑不会产生任何影响)。你知道吗
否则,您可以修改
render_placeholder
(我假设它是一个自定义标记)来检查Content
对象的published字段,并将要呈现的输入设置为disabled
。你知道吗它看起来像这样
相关问题 更多 >
编程相关推荐