看来Django隐藏了在Django管理界面中显示/编辑标记主键的字段。
假设我想输入我可能想要或不想指定主键的数据。我如何在管理界面中显示主键,如何指定它是可选的?
答案 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"
}