Des numéros imbriqués dans L'administration de Django?
D'accord, j'ai un design assez 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')
y a-t-il un moyen facile pour permettre à un utilisateur de créer une mise à jour sur une seule page?
Ce que je veulent est un utilisateur d'être en mesure d'aller à l'interface d'admin, ajouter une nouvelle mise à Jour, puis lors de l'édition d'une mise à Jour d'ajouter un ou plusieurs Postes, avec chaque Poste ayant un ou plusieurs articles dans les Médias. En outre, je veux que l'utilisateur soit en mesure de réorganiser les postes dans une mise à jour.
admin.py:
class MediaInline(admin.StackedInline):
model = Media
class PostAdmin(admin.ModelAdmin):
inlines = [MediaInline,]
cela permet à l'utilisateur d'ajouter un nouvel élément de poste, sélectionnez la mise à jour pertinente, ajouter les éléments médias à elle, et cliquez sur Enregistrer - ce qui est très bien. Mais il n'y a aucun moyen de voir tous les messages qui appartiennent à une mise à jour donnée dans un seul endroit, ce qui à son tour signifie que vous ne pouvez pas roder les messages dans une mise à jour. C'est vraiment assez déroutant pour l'utilisateur final.
à l'aide?
5 réponses
a ce jour, il n'y a pas de manière "intégrée" d'avoir emboîté des lignes (inline inside inline) à django.contrib.admin. Tirer quelque chose comme ça est possible en ayant vos propres sous-classes ModelAdmin et InlineModelAdmin qui permettraient ce genre de fonctionnalité. Voir les taches sur ce billet http://code.djangoproject.com/ticket/9025 pour des idées sur la façon de le mettre en œuvre. Vous auriez également besoin de fournir vos propres modèles qui auraient imbriqué itération sur les deux le niveau supérieur en ligne et c'est enfant en ligne.
il y a maintenant cet œuf disponible, qui est une compilation des taches pertinentes mentionnées dans l'autre réponse:
je viens de tombé sur cette question... Semble que ce fil qui contient la requête pour la caractéristique imbriquée inlines ( https://code.djangoproject.com/ticket/9025#no2 ) a été mis à jour avec de plus amples informations.
sur mesure application appelée "django-super-inline" a été libéré. Plus de détails ici: https://github.com/BertrandBordage/django-super-inlines
Installation et utilisation les instructions ci-dessous.
J'espère que c'est utile pour qui que ce soit.
j'ai rencontré un problème similaire. Mon approche était de faire une UpdateAdmin qui tenait en ligne pour les médias et le Post... il fait simplement en sorte que vous avez une liste de toutes les entrées de médias suivies par tous les messages dans une mise à jour.
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]
ce n'est pas une solution idéale mais cela fonctionne pour un travail rapide et sale autour.
j'ai fait cela en utilisant https://github.com/theatlantic/django-nested-admin , pour la structure de données suivante:
- concours
- juges
- candidats
- Chanteurs
- Chansons
Mon admin.py
fichier:
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 semble être beaucoup plus activement maintenu que les autres applications déjà mentionnées ( https://github.com/BertrandBordage/django-super-inlines et https://github.com/Soaa-/django-nested-inlines )