listes variables, également connu comme beaucoup à une relation, sont généralement traitées en faisant un modèle distinct pour les nombreux et, dans ce modèle, en utilisant un ForeignKey à la « une »
Il n'y a pas une application comme celle-ci dans django.contrib, mais il y a projets externes virtuels que vous pouvez utiliser, par ex. django-photologue qui a même un certain soutien pour visualiser les images dans l'admin.
Le site d'administration ne peut pas être rendu "user-proof", il ne doit être utilisé que par des utilisateurs de confiance. Compte tenu de cela, la façon de rendre votre site d'administration décent serait de définir un ModelAdmin pour votre propriété, puis en ligne les photos (inline documentation).
Donc, pour vous donner quelques projets rapides, tout ressemblerait à quelque chose comme ceci:
# models.py
class Property(models.Model):
address = models.TextField()
...
class PropertyImage(models.Model):
property = models.ForeignKey(Property, related_name='images')
image = models.ImageField()
et:
# admin.py
class PropertyImageInline(admin.TabularInline):
model = PropertyImage
extra = 3
class PropertyAdmin(admin.ModelAdmin):
inlines = [ PropertyImageInline, ]
admin.site.register(Property, PropertyAdmin)
La raison d'utiliser l'argument related_name sur le ForeignKey est donc vos requêtes seront plus lisibles, par exemple dans ce cas, vous pouvez faire quelque chose comme ceci dans votre vue:
property = Property.objects.get(pk=1)
image_list = property.images.all()
EDIT: oublié de mentionner, vous pouvez mettre en œuvre glisser-déposer commande dans l'administration à l'aide de l'extrait de Simon Willison Orderable inlines using drag and drop with jQuery UI
Le modèle PropertyImage doit inclure un champ pour la commande. – akaihola
C'était un sauveur ... Merci beaucoup –
Merci, incroyable!L'extrait de commande fonctionne très bien, après un léger changement, car il n'est pas écrit pour FileFields. La ligne 59 doit devenir "if ($ (this) .find ('input [type = fichier]'). Val() || $ (this) .find ('p.file-upload'). Longueur) {" pour vérifier si un fichier a déjà été téléchargé ou si un fichier est en attente de téléchargement. En outre, il fonctionne sur un StackedInline, pas un TabularInline (hors de la boîte, de toute façon). – mrooney