Visualización de la lista de administradores de Django + ForeignKey = Lista de cambios vacía

Tengo un problema extraño en django admin list_display . Cada vez que agrego una clave foránea a un list_display la vista completa de la lista de cambios se queda en blanco mostrando solo el total de entradas.

modelos.py:

 class Organization(models.Model): org_id = models.AutoField(primary_key=True) org_name = models.CharField(max_length=288) def __unicode__(self): return self.org_name class Meta: db_table = u'organization' class Server(models.Model): server_id = models.AutoField(primary_key=True) server_name = models.CharField(max_length=135,verbose_name="Server Name") org = models.ForeignKey(Organization,verbose_name="Organization") def __unicode__(self): return self.server_name class Meta: db_table = u'server' 

admin.py:

 class ServerAdmin(admin.ModelAdmin): list_display = ('server_name','org') admin.site.register(Server,ServerAdmin) 

Ahora esperaría que este código me muestre el nombre de la organización en la ChangeList View , pero en su lugar, obtengo esto:

lista de cambios vacía :(

Si list_display la list_display en el list_display de la clase ServerAdmin , obtengo esto:

lista de cambios con los datos :(

No modifiqué la plantilla ni ModelAdmin ningún método ModelAdmin . Estoy usando Mysql (5.1.58) como mi base de datos que viene con el repository de ubuntu 11.10.

Estaré realmente contento si pudiera conseguir una solución para este tipo de problema. Gracias por adelantado.

Segundo, Stefano sobre el hecho de que null=True, blank=True se agregará. Pero, creo que solo necesita agregarlo al campo org_name del modelo de Organization . Eso debería abrirse paso a través. Se debe hacer porque ha ejecutado inspectdb para crear modelos a partir de su base de datos heredada. Y probablemente la tabla de organization en el DB tiene una cadena vacía almacenada. Por lo tanto, agregar lo anterior permitiría que el administrador muestre un campo / columna en blanco.

Además, también puede intentar usar devoluciones de llamada en situaciones en las que no desee realizar cambios en la definición de su modelo como el anterior.

Intente agregar null=True, blank=True en todos los campos de su modelo.

Por lo general, el administrador de django fallará en silencio (por lo tanto, no mostrará registros en la lista) si la fila no valida las restricciones del modelo.

Consulte: https://stackoverflow.com/a/163968/1104941

¿Funciona lo siguiente para ti?

admin.py:

 class ServerAdmin(admin.ModelAdmin): list_display = ('server_name','org__org_name') admin.site.register(Server,ServerAdmin) 

Tuve un problema similar y lo resolví así (usando tu ejemplo):

 class ServerAdmin(admin.ModelAdmin): list_display = ('server_name', 'get_org') def get_org(self, obj): return obj.org.org_name get_org.short_description = 'Org' admin.site.register(Server,ServerAdmin)