Variablenlisten, auch als viele-zu-eins-Beziehung, sind in der Regel, indem sie ein separates Modell für die vielen und in diesem Modell unter Verwendung eines ForeignKey zum „one“ behandelt bekannt .
Es gibt keine App wie diese in django.contrib, aber es gibt se verschiedene externe Projekte, die Sie verwenden können, z. django-photologue, die sogar einige Unterstützung für die Anzeige der Bilder im Admin hat.
Die Admin-Site kann nicht benutzerfreundlich gemacht werden, sie sollte nur von vertrauenswürdigen Benutzern verwendet werden. In Anbetracht dessen besteht die Möglichkeit, Ihre Admin-Site anständig zu gestalten, darin, einen ModelAdmin für Ihre Property zu definieren und dann die Fotos zu inline (inline documentation).
Also, Sie einige schnelle Entwürfe zu geben, wäre alles in etwa so aussehen:
# models.py
class Property(models.Model):
address = models.TextField()
...
class PropertyImage(models.Model):
property = models.ForeignKey(Property, related_name='images')
image = models.ImageField()
und:
# admin.py
class PropertyImageInline(admin.TabularInline):
model = PropertyImage
extra = 3
class PropertyAdmin(admin.ModelAdmin):
inlines = [ PropertyImageInline, ]
admin.site.register(Property, PropertyAdmin)
Der Grund für die ForeignKey das related_name Argument für die Verwendung ist So werden Ihre Abfragen besser lesbar, z in diesem Fall, dass Sie so etwas wie dies Ihrer Meinung nach tun können:
property = Property.objects.get(pk=1)
image_list = property.images.all()
EDIT: vergessen zu erwähnen, Sie können dann per Drag-and-Drop-Bestellung im Admin mit Simon Willison des Schnipsel Orderable inlines using drag and drop with jQuery UI
Das PropertyImage-Modell sollte ein Feld zum Bestellen enthalten. – akaihola
Dies war ein Retter ... Danke eine Tonne –
Danke, erstaunlich!Das orderable Snippet funktioniert nach einer kleinen Änderung sehr gut, da es nicht für FileFields geschrieben wird. Zeile 59 muss "if ($ (this) .find ('input [type = file]') werden. Val() || $ (this) .find ('p.file-upload'). Length) {" um zu überprüfen, ob entweder bereits eine Datei hochgeladen wurde oder eine Datei hochgeladen wurde. Außerdem funktioniert es auf einer StackedInline, nicht auf einer TabularInline (sowieso out of the box). – mrooney