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

时间:2013-07-16 10:04:14

标签: django django-models django-admin

我的models.py有以下课程:

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

    def __unicode__(self):
        return self.id

admin.py包含以下几行:

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

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

admin.site.register(TodoList, TodoListAdmin)

但是,在Django 1.5.1 admin中,id未显示为只读。相反,我只是显示(None)。如何自动显示我创建的对象的id为只读?

enter image description here

2 个答案:

答案 0 :(得分:4)

通常在保存之前它没有ID。

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

models.py

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

    def __str__(self):
        return str(self.a)

admin.py

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)

请检查以上代码。如有任何问题请发表评论。

答案 1 :(得分:3)

在保存之前它没有ID。如果您要添加新的,则显示“无”是正确的。