theme - django-admin command
Editar/mostrar la clave principal en Django Admin (5)
En la documentación de django , hay una breve oración sobre eso, que no está clara:
Si no están presentes las opciones de campos ni conjuntos de campos, Django mostrará de forma predeterminada cada campo que no sea un AutoField y tenga editable = True, en un solo conjunto de campos, en el mismo orden en que se definen los campos en el modelo.
La razón es que, django no le permite editar un AutoField
de ninguna manera (y eso es lo correcto, ya que es un valor de incremento automático y no debe editarse). La respuesta de @ mnelson4 es un buen enfoque para mostrarla.
Parece que Django oculta los campos marcados como Clave principal para que no se muestren / editen en la interfaz de administración de Django.
Digamos que me gustaría ingresar datos en los que puedo o no querer especificar una clave principal. ¿Cómo voy a mostrar las claves principales en la interfaz de administración y cómo puedo especificar que sea opcional?
No tiene sentido tener una clave primaria opcional. O el PK es un autoincremento, en cuyo caso no es necesario editarlo, o se especifica manualmente, en cuyo caso siempre es obligatorio.
¿Por qué necesitas esto?
Si especifica explícitamente el campo de clave principal en sus modelos (con primary_key=True
), debería poder editarlo en el administrador.
Para los modelos de Django creados a través de ./manage.py syncdb
el siguiente campo de clave principal se agrega automáticamente:
id = models.AutoField(primary_key=True)
Si cambia (o agrega) eso a su modelo explícitamente como una clave principal de IntegerField, podrá editarlo directamente usando el administrador:
id = models.IntegerField(primary_key=True)
Pero como otros señalaron, este es un campo de minas potencial ...
La respuesta con los votos más altos no funcionó para mí. Necesitaba un getter.
class StudentEnrollmentInline(admin.TabularInline):
model = Enrollment
readonly_fields=(''student_enrollment_id'',)
def student_enrollment_id(self, obj):
return obj.id
Usando django 1.11
También quería mostrar simplemente la ''id'' (clave principal) dentro del administrador de Django, pero no necesariamente editarla. Acabo de agregarlo a la lista readonly_fields
, y se mostró bien. ES DECIR:
class StudentEnrollmentInline(admin.TabularInline):
model = Enrollment
readonly_fields=(''id'',)
mientras que si traté de agregarlo a la lista de ''campos'', Django se molestó conmigo, diciendo que el campo no existía ...