python - superusuario - modelos en django
Anidados lĂneas en el administrador de Django? (5)
A partir de ahora no hay una forma "incorporada" de tener líneas anidadas (en línea dentro de línea) en django.contrib.admin. Eliminar algo así es posible al tener sus propias subclases ModelAdmin e InlineModelAdmin que habilitarían este tipo de funcionalidad. Consulte los parches en este ticket http://code.djangoproject.com/ticket/9025 para obtener ideas sobre cómo implementar esto. También necesitaría proporcionar sus propias plantillas que hubieran anidado la iteración tanto en el nivel superior en línea como en el niño en línea.
De acuerdo, tengo un diseño bastante simple.
class Update(models.Model):
pub_date = models.DateField()
title = models.CharField(max_length=512)
class Post(models.Model):
update = models.ForeignKey(Update)
body = models.TextField()
order = models.PositiveIntegerField(blank=True)
class Media(models.Model):
post = models.ForeignKey(Post)
thumb = models.ImageField(upload_to=''frontpage'')
fullImagePath = models.ImageField(upload_to=''frontpage'')
¿Existe una manera fácil de permitir que un usuario cree una actualización en una sola página?
Lo que quiero es que un usuario pueda ir a la interfaz de administrador, agregar una nueva actualización y luego, al editar una actualización, agregar una o más publicaciones, y cada publicación tendrá uno o más elementos de medios. Además, quiero que el usuario pueda reordenar publicaciones dentro de una actualización.
Mi intento actual tiene lo siguiente en admin.py:
class MediaInline(admin.StackedInline):
model = Media
class PostAdmin(admin.ModelAdmin):
inlines = [MediaInline,]
Esto permite que el usuario agregue un nuevo elemento de publicación, seleccione la actualización relevante, agregue los elementos multimedia a él y presione guardar, lo cual está bien. Pero no hay forma de ver todas las Publicaciones que pertenecen a una Actualización determinada en un solo lugar, lo que a su vez significa que no puede Roderder Publicaciones dentro de una actualización. Es realmente bastante confuso para el usuario final.
¿Ayuda?
Ahora está disponible este huevo, que es una recopilación de los parches relevantes mencionados en la otra respuesta:
Lo he hecho usando https://github.com/theatlantic/django-nested-admin , para la siguiente estructura de datos:
- Concurso
- Jueces
- Concursantes
- Cantantes
- Canciones
Mi archivo admin.py
:
from django.contrib import admin
import nested_admin
from .models import Contest, Contestant, Judge, Song, Singer
class SongInline(nested_admin.NestedTabularInline):
model = Song
extra = 0
class SingerInline(nested_admin.NestedTabularInline):
model = Singer
extra = 0
class ContestantInline(nested_admin.NestedTabularInline):
model = Contestant
inlines = [SongInline, SingerInline]
extra = 0
class JudgeInline(nested_admin.NestedTabularInline):
model = Judge
extra = 0
class ContestAdmin(nested_admin.NestedModelAdmin):
model = Contest
inlines = [ContestantInline, JudgeInline]
extra = 0
admin.site.register(Contest, ContestAdmin)
https://github.com/theatlantic/django-nested-admin parece tener un mantenimiento mucho más activo que las otras aplicaciones ya mencionadas ( https://github.com/BertrandBordage/django-super-inlines y https://github.com/Soaa-/django-nested-inlines )
Me encontré con un problema similar a esto. Mi enfoque consistía en crear una UpdateAdmin que incluyera tanto medios como publicaciones ... básicamente lo hace para tener una lista de todas las entradas de medios seguidas por todas las publicaciones de una actualización.
class MediaInline(admin.StackedInline):
model = Media
class PostInline(admin.StackedInline):
model = Post
class PostAdmin(admin.ModelAdmin):
inlines = [MediaInline,]
class UpdateAdmin(admin.ModelAdmin):
inlines = [MediaInline,PostInline]
No es una solución ideal pero funciona para un trabajo rápido y sucio.
También me encontré con este problema ... Parece que este hilo que contiene la solicitud de la función de líneas anidadas ( https://code.djangoproject.com/ticket/9025#no2 ) se ha actualizado con más información.
Se ha lanzado una aplicación personalizada llamada "django-super-inline". Más detalles aquí: https://github.com/BertrandBordage/django-super-inlines
Instrucciones de instalación y uso a continuación.
Espero que esto sea útil para quien se encuentre con esto.