-
Les listes de variables, également connues sous le nom de relation "many-to-one", sont généralement traitées en créant un modèle distinct pour le "many" et, dans ce modèle, en utilisant un ForeignKey pour le "one".
-
Il n'y a pas d'application de ce type dans django.contrib, mais il existe plusieurs projets externes que vous pouvez utiliser, par ex. django-photologue qui permet même de visualiser les images dans l'administration.
-
Le site d'administration ne peut pas être "à l'épreuve des utilisateurs", il ne doit être utilisé que par des utilisateurs de confiance. Dans ces conditions, la façon de rendre votre site d'administration décent serait de définir un ModelAdmin pour votre propriété, puis d'intégrer les photos ( documentation en ligne ).
Donc, pour vous donner quelques ébauches rapides, tout ressemblerait à 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 de l'utilisation de l'argument related_name sur la clé étrangère est que 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 : j'ai oublié de mentionner que vous pouvez ensuite mettre en œuvre le classement par glisser-déposer dans l'administration en utilisant le code de Simon Willison. Des lignes commandables par glisser-déposer avec jQuery UI