在Django admin中将AutoField(primary_key)显示为只读

ors*_*iro 1 django django-models django-admin

models.py的班级如下:

class TodoList(models.Model):
    id = models.AutoField(primary_key=True)

    def __unicode__(self):
        return self.id
Run Code Online (Sandbox Code Playgroud)

admin.py 包含以下几行:

from django.contrib import admin
from todolist.models import TodoList

class TodoListAdmin(admin.ModelAdmin):
    readonly_fields = ('id',)

admin.site.register(TodoList, TodoListAdmin)
Run Code Online (Sandbox Code Playgroud)

但是,在Django 1.5.1管理员中,id不会显示为只读。相反,我只是被展示(None)。如何自动id将我创建的对象的显示为只读?

在此处输入图片说明

Pra*_*aur 5

Generally It does not have an ID until you save it.

请遵循以下代码,它一定会帮助您克服None(显示的数据)。

models.py

class A(models.Model):
    a = models.AutoField(primary_key=True)

    def __str__(self):
        return str(self.a)
Run Code Online (Sandbox Code Playgroud)

管理员

class AAdmin(admin.ModelAdmin):
    list_display = ['a']
    readonly_fields = ['a_display']

    def a_display(self, obj):
        if obj.a is None:
            a = A.objects.all().order_by('-a')[:1]
            if a:
                return a[0].a + 1
            else:
                return 0
        else:
            return obj.a

admin.site.register(A, AAdmin)
Run Code Online (Sandbox Code Playgroud)

请检查上面的代码。如果有任何问题,请发表评论。