有没有办法定义模型中的哪些字段可以在管理应用程序中编辑?

ash*_*her 5 python django

假设如下:

模型.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 ,但这也不起作用(事实上,阻止页面渲染)。

想法?

Dmi*_*nko 4

对于这种特殊情况,您可以重写 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)