有没有办法定义模型中哪些字段可以在管理应用中编辑?
假设有以下内容:
models.py
class Entry(models.Model):
title = models.CharField(max_length=50)
slug = models.CharField(max_length=50, unique=True)
body = models.CharField(max_length=200)
admin.py
class EntryAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug':('title',)}
我希望在标题生成的时候,自动填充一个叫做“slug”的字段,但我不想让用户在后台管理中修改这个字段。我原本以为只要在管理对象中添加fields=[]并且不包括slug这个字段就可以了,但结果并没有成功。我还尝试在模型中设置editable=False,但这也没用(实际上,这会导致页面无法正常显示)。
大家有什么想法吗?
5 个回答
0
这个Django代码片段可以满足你的需求,它通过定义一个自定义的只读控件来实现。所以,你可以为这个字段定义一个特殊的编辑器,而这个编辑器实际上是不允许任何编辑的。
0
我不太确定你问的这个事情是否可行。你最好的办法可能是完全在管理界面隐藏这个“slug”(网址的一部分),可以通过设置你的字段组来实现。然后再重写保存的方法,把“slug”从标题中复制过来,并且可能还要把它转换成适合用作网址的格式……
4
在这个特定的情况下,你可以重写你的保存方法,把标题转换成一个简短的、易于识别的字符串(这个功能是内置的,可以查看Django的源代码),然后把这个字符串存储在slug字段里。这样你也可以很方便地检查这个slug是否是唯一的,如果不是的话,可以对它进行一些修改。
看看这个例子:
def save(self):
from django.template.defaultfilters import slugify
if not self.slug:
self.slug = slugify(self.title)
super(Your_Model_Name,self).save()