Django将模型的某些元素的某些字段设为只读

时间:2018-10-04 12:39:56

标签: django django-models

我的模型如下:

class Article(models.Model):
    title = models.CharField(blank=False, null=False, max_length=200, verbose_name="title")
    description = RichTextUploadingField(blank=False, null=False, verbose_name="description")

是否可以:

1。

使用默认title='Terms and conditions'创建一篇文章,该文章在django-admin中将是只读的,但是可以在django-admin中对其进行修改吗?

2。

如果已经创建了文章,请使用django shell将属性设置为只读,就像这样吗?

python manage.py shell

from articles.models import Article
terms = Article.object.get(title='Terms and conditions')
terms.title.readonly = True

此选项引发错误:

  

AttributeError:'str'对象没有属性'readonly'

2 个答案:

答案 0 :(得分:1)

您可以分两个步骤进行操作:

  1. 使用Model.Admin.readonly_fieldshttps://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.readonly_fields

  2. 在管理员中将该字段设为只读
  3. 在保存标题之前使用信号填充标题,在设置标题默认值的位置添加一个预保存钩子:https://docs.djangoproject.com/en/2.1/ref/signals/#pre-save

答案 1 :(得分:1)

在定义管理模型时,您正在寻找的是readonly_fields。在ModelAdmin.readonly_fields attribute

上查看Django文档

根据您的情况,在 admin.py 中定义以下内容:

from .models import Article

class ArticleAdmin(admin.ModelAdmin):
    readonly_fields=('title',)

admin.site.register(Article, ArticleAdmin)

祝你好运!