Django admin - 使所有字段只读

pythonDjango

1个回答

写回答

2565390117

2025-06-19 07:00

+ 关注

Django
Django

如何在Django admin中使所有字段只读?

在开发Web应用程序时,Django admin是一个非常有用的工具,它提供了一个用户友好的界面来管理数据库中的数据。然而,有时我们希望将某些字段设置为只读,以防止用户对其进行修改。在本文中,我们将探讨如何使用Django admin使所有字段只读,并提供一个简单的案例代码来说明。

要使Django admin中的所有字段只读,我们可以使用admin.ModelAdmin类的get_readonly_fields()方法。这个方法返回一个包含所有只读字段的元组。我们可以在自定义的ModelAdmin类中重写这个方法,以指定哪些字段应该是只读的。

让我们以一个简单的例子来说明这个概念。假设我们有一个名为"Book"的模型,它有几个字段,包括"title"、"author"和"publication_date"。我们希望在Django admin中将所有这些字段都设置为只读。

首先,我们需要创建一个自定义的ModelAdmin类,然后在其中重写get_readonly_fields()方法。以下是一个示例代码:

Python

from Django.contrib import admin

from .models import Book

class BookAdmin(admin.ModelAdmin):

readonly_fields = ('title', 'author', 'publication_date')

def get_readonly_fields(self, request, obj=None):

if obj: # 编辑已有对象时,所有字段都是只读的

return self.readonly_fields + ('field1', 'field2', ...)

return self.readonly_fields

admin.site.register(Book, BookAdmin)

在上面的代码中,我们创建了一个名为BookAdmin的自定义ModelAdmin类,并指定了readonly_fields属性为包含所有只读字段的元组。然后,我们重写了get_readonly_fields()方法,以根据是否正在编辑已有对象来返回只读字段的列表。如果正在编辑已有对象,我们可以根据需要添加其他字段到只读字段列表中。

通过将我们的自定义ModelAdmin类注册到Django admin中,我们就可以在Django admin界面中将所有Book模型的字段设置为只读。

在本文的中间段落中,我们将介绍如何为只读字段添加一个标题,并为标题添加标签。这将使只读字段在Django admin界面中更加突出和易于识别。

要为只读字段和标签,我们可以使用自定义的HTML模板。以下是一个示例代码:

Python

from Django.contrib import admin

from Django.utils.html import format_html

from .models import Book

class BookAdmin(admin.ModelAdmin):

readonly_fields = ('title', 'author', 'publication_date')

def get_readonly_fields(self, request, obj=None):

if obj:

return self.readonly_fields + ('field1', 'field2', ...)

return self.readonly_fields

def formfield_for_dbfield(self, db_field, <strong>kwargs):

field = super().formfield_for_dbfield(db_field, </strong>kwargs)

if db_field.name in self.readonly_fields:

field.widget.attrs['readonly'] = 'readonly'

field.label = format_html('<strong>{}</strong>', field.label)

return field

admin.site.register(Book, BookAdmin)

在上面的代码中,我们重写了ModelAdmin类的formfield_for_dbfield()方法。在这个方法中,我们检查字段是否在只读字段列表中,如果是,我们将字段的widget属性设置为只读,并为字段的标签添加了标签。

通过使用这个自定义ModelAdmin类,我们可以在Django admin界面中将所有只读字段设置为只读,并为这些字段和标签,以提高可读性和可识别性。

本文介绍了如何在Django admin中使所有字段只读。我们通过自定义ModelAdmin类并重写get_readonly_fields()方法来实现这一目标。此外,我们还展示了如何为只读字段和标签,以提高可读性。通过这些方法,我们可以更好地控制和管理Django admin中的数据。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号