假设如下:
模型.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)
Run Code Online (Sandbox Code Playgroud)
管理员.py
class EntryAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug':('title',)}
Run Code Online (Sandbox Code Playgroud)
我希望标题预先填充该标题,但我不希望用户能够从管理员处对其进行编辑。我认为将 fields=[] 添加到管理对象并且不包含 slug 会起作用,但事实并非如此。我还尝试在模型中设置 editable=False ,但这也不起作用(事实上,阻止页面渲染)。
想法?
对于这种特殊情况,您可以重写 save 方法来 slugify (它是内置方法,请查看 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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |