Django管理后台主键应为只读,但在新建条目时应可见

0 投票
1 回答
765 浏览
提问于 2025-04-18 08:31

你好,我想在查看或修改记录时让主键可见。但是在Django的管理页面中,它不应该是可编辑的。因此,我尝试使用只读字段。不过,当我设置为只读时,我在添加新记录时无法输入主键的值。

这是我的admin.py文件

class EmployeeAdmin(admin.ModelAdmin):
        search_fields = ['name']
        list_display = ('name','id','dob','bill','mobile','email')
        list_filter = ('bill','proj')
        readonly_fields=('id',)

我的model.py文件是,

  class Employee(models.Model):
     id = models.IntegerField(max_length = 6,primary_key=True)
     name = models.CharField(max_length = 100)
     dob = models.DateField(verbose_name='Date Of Birth')
     doj = models.DateField(verbose_name='Date Of Joining')

1 个回答

1

你在 admin.py 文件中的类应该像下面这样。请使用 get_readonly_fields 来实现这个功能。

class EmployeeAdmin(admin.ModelAdmin):
        search_fields = ['name']
        list_display = ('name','id','dob','bill','mobile','email')
        list_filter = ('bill','proj')
      # readonly_fields=('id',)

        def get_readonly_fields(self, request, obj=None):
            if obj: # editing an existing object
                return self.readonly_fields + ('id',)
            return self.readonly_fields

撰写回答