2011-03-01 18 views
5

Considere este modelo simplificado de Django:Django aplicación de administración para la página principal/detalle

class Item(models.Model): 
    title = models.CharField(max_length=200) 
    pub_date = models.DateTimeField() 

class ItemDetail(models.Model): 
    item = models.ForeignKey(Item) 
    name = models.CharField(max_length=200) 
    value = models.CharField(max_length=200) 
    display_order = models.IntegerField() 

¿Hay una manera de utilizar de administración para editar un artículo con sus detalles en la misma página con un formulario que se ve algo como :

title: <  > 
pub_date: <  > 
details: 
+-----------------+----------------------+-------------------------+ 
|  name  |  value   |  diplay order  | 
+-----------------+----------------------+-------------------------+ 
|<    >|<     >|<      >| 
|<    >|<     >|<      >| 
|<    >|<     >|<      >| 
|<    >|<     >|<      >| 
|<    >|<     >|<      >| 
+-----------------+----------------------+-------------------------+ 

Dónde < > habría marcador de posición para los tipos de entrada para la entrada de datos.

Entonces, mi pregunta: ¿puedo usar admin para editar una relación foreign key desde la perspectiva de los padres? Si no hay una manera de editar datos con el administrador de Django de esta manera, ¿sería una buena idea tratar de ampliar/personalizar el administrador para hacer esto? ¿Alguna instrucción sobre cómo hacer esto?

Gracias!

Respuesta

9

Esa es en realidad la única dirección en la que Django es bueno para tratar las relaciones; al revés, es más difícil (edita directamente el elemento primario relacionado del niño).

Para obtener el formato que desee, mira en inlines ModelAdmin:
http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin

class ItemDetailInline(admin.TabularInline): 
    model = ItemDetail 

class ItemAdmin(admin.ModelAdmin): 
    inlines = [ 
     ItemDetailInline, 
    ] 
+0

WOW. Bastante impresionante. Leí muchos documentos de administración de DJANGO antes de publicar esta pregunta. No puedo creer que me haya perdido algo tan obvio. ¡Muchas gracias! –

+0

No hay problema;) ¡Ahora necesitamos una forma integrada de manejar las siguientes claves foráneas directamente! –

Cuestiones relacionadas