queryset - django changelist_view
¿Cómo ocultar algunos campos en django-admin? (2)
Debes crear admin.py en tu módulo (probablemente libro )
class BookAdmin(admin.ModelAdmin):
list_display = ("pk", "get_title_or_nothing")
En clase de libro :
class Book:
...
def get_title_or_nothing(self):
if self.type == WEIRD_TYPE:
return ""
return self.title
ACTUALIZADO:
class BookAdmin(admin.ModelAdmin):
list_display = ("pk", "get_title_or_nothing")
def get_form(self, request, obj=None, **kwargs):
if obj.type == "1":
self.exclude = ("title", )
form = super(BookAdmin, self).get_form(request, obj, **kwargs)
return form
class Book(models.Model):
title = models.CharField(..., null=True)
type = models.CharField(...)
author = models.CharField(...)
Tengo una clase simple en models.py. En administración me gustaría ocultar el título del libro (en forma de detalles del libro) cuando el tipo de libro guardado es 1. ¿Cómo se hace esto de la manera más simple?
Para Django> 1.8 uno puede establecer directamente los campos para ser excluidos en el administrador :
class PostCodesAdmin(admin.ModelAdmin):
exclude = (''pcname'',)
Los campos ocultos se definen directamente en el ORM de Django estableciendo el atributo de campo: editable = False
p.ej
class PostCodes(models.Model):
gisid = models.IntegerField(primary_key=True)
pcname = models.CharField(max_length=32, db_index=True, editable=False)
...
Sin embargo, establecer o cambiar los campos del modelo directamente puede no siempre ser posible o ventajoso. En principio, la siguiente configuración de admin.py
podría funcionar, pero no se excluirá ya que es una opción de InlineModelAdmin.
class PostCodesAdmin(admin.ModelAdmin):
exclude = (''pcname'',)
....
Una solución que funciona al menos en Django 1.4 (y probablemente en los últimos números de versión) es:
class PostCodesAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
form = super(PostCodesAdmin, self).get_form(request, obj, **kwargs)
del form.base_fields[''enable_comments'']
return form
Para la vista administrativa de la lista de los elementos, basta con simplemente omitir los campos no necesarios: por ejemplo
class PostCodesAdmin(admin.ModelAdmin):
list_display = (''id'', ''gisid'', ''title'', )