在Django Admin中编辑/显示主键

时间:2010-03-28 03:10:17

标签: django django-models django-admin

看来Django隐藏了在Django管理界面中显示/编辑标记主键的字段。

假设我想输入我可能想要或不想指定主键的数据。我如何在管理界面中显示主键,如何指定它是可选的?

6 个答案:

答案 0 :(得分:34)

我还想在Django管理员中简单地显示'id'(主键),但不一定要编辑它。我刚刚将它添加到readonly_fields列表中,它显示正常。 IE:

class StudentEnrollmentInline(admin.TabularInline):
    model = Enrollment
    readonly_fields=('id',)

如果我试图将它添加到'fields'列表中,Django对我很生气,说该字段不存在......

答案 1 :(得分:12)

如果您在模型中明确指定主键字段(使用primary_key=True),则应该可以在管理员中对其进行编辑。

对于通过./manage.py syncdb创建的Django模型,将自动添加以下主键字段:

id = models.AutoField(primary_key=True)

如果您将模型显式更改(或添加)为IntegerField主键,则可以使用admin直接编辑它:

id = models.IntegerField(primary_key=True)

但正如其他人指出的那样,这是一个潜在的雷区......

答案 2 :(得分:1)

拥有可选的主键是没有意义的。 PK是一个自动增量,在这种情况下不需要编辑它,或者它是手动指定的,在这种情况下总是需要它。

你为什么需要这个?

答案 3 :(得分:1)

django documentation中,有一个简短的句子,不清楚:

  

如果既没有字段也没有字段集选项,Django将默认显示每个不是AutoField的字段,并且在单个字段集中具有editable = True,其顺序与模型中定义的字段的顺序相同。 / p>

原因是,django不允许你以任何方式编辑AutoField(这是正确的,因为它是一个自动增量值,不应该被编辑)。 @ mnelson4的答案是展示它的好方法。

答案 4 :(得分:1)

The answer with the highest votes对我不起作用。我需要一个吸气剂。

class StudentEnrollmentInline(admin.TabularInline):
    model = Enrollment
    readonly_fields=('student_enrollment_id',)

    def student_enrollment_id(self, obj):
        return obj.id

使用django 1.11

答案 5 :(得分:1)

要显示主键,默认情况下该主键在数据库中的列名称为“ id”-使用“ pk”

{
    "_id" : ObjectId("5c3e516647d3c103a0ad0959"),
    "gtin" : "4548736035652",
    "modelAlias" : "KDL-32WD756",
    "modelGroup" : "WD75",
    "retailerTitle" : "Sony Bravia 32WD756BU LED HD 1080p Smart TV, 32 with Freeview HD & Cable Management System",
    "shortTitle" : "Sony WD75 32 inch Black",
    "summary" : "The Sony WD75 in Black is a smart TV, and comes with a 32 inch, full HD, LED screen.",
    "variant" : "4548736035645",
    "colour" : "Blacks",
    "resolution" : "Medium",
    "curved" : "No",
    "panelType" : "LED",
    "3D" : "No",
    "size" : "Small",
    "goodOnWall" : "No",
    "darksAndBrights" : "Medium",
    "refreshRate" : "Standard",
    "richerColours" : "No",
    "wiFi" : "Yes",
    "smart" : "Yes",
    "recordable" : "Yes",
    "latestModel" : "No",
    "soundQuality" : "Low",
    "voiceActivated" : "No",
    "inputs" : "Two",
    "pictureQuality" : "Medium",
    "brand" : "Sony",
    "energyEfficiency" : "Medium",
    "sizeBoundary" : "Upper small",
    "mountabilityFunction" : "Bad",
    "screenSize" : "31-40",
    "viewingAngle" : "Wide",
    "descriptions" : [
        {
            "criteriaName" : "Size",
            "attributeName" : "Small",
            "description" : "Compact screen size"
        }
    ],
    "categoryId" : "televisions",
    "id" : "94305057-fc1f-3f88-cb74-7056e72077ac"
}