elenchi di variabili, noto anche come una relazione molti-a-uno, di solito sono gestite facendo un modello separato per i molti e, a quel modello, utilizzando un ForeignKey a "uno"
Non c'è un'applicazione come questa in django.contrib, ma ci sono progetti esterni verali che puoi utilizzare, ad es. django-photologue che ha anche qualche supporto per la visualizzazione delle immagini nell'amministratore.
Il sito di amministrazione non può essere reso "user proof", deve essere utilizzato solo da utenti fidati. Detto questo, il modo per rendere decente il tuo sito di amministrazione sarebbe definire un ModelAdmin per la tua proprietà e quindi incorporare le foto (inline documentation).
Così, per darvi alcune bozze veloci, tutto sarebbe simile a questa:
# models.py
class Property(models.Model):
address = models.TextField()
...
class PropertyImage(models.Model):
property = models.ForeignKey(Property, related_name='images')
image = models.ImageField()
e:
# admin.py
class PropertyImageInline(admin.TabularInline):
model = PropertyImage
extra = 3
class PropertyAdmin(admin.ModelAdmin):
inlines = [ PropertyImageInline, ]
admin.site.register(Property, PropertyAdmin)
La ragione per usare l'argomento related_name sul ForeignKey è quindi le tue domande saranno più leggibili, ad es in questo caso si può fare qualcosa di simile a suo avviso:
property = Property.objects.get(pk=1)
image_list = property.images.all()
EDIT: dimenticato di menzionare, è possibile quindi implementare ordinamento drag-and-drop in admin utilizzando frammento di Simon Willison Orderable inlines using drag and drop with jQuery UI
fonte
2009-02-11 17:52:25
Il modello PropertyImage dovrebbe includere un campo per l'ordine. – akaihola
Questo era un Salvatore ... Grazie mille –
Grazie, fantastico!Lo snippet ordinabile funziona alla grande, dopo una leggera modifica, poiché non è scritto per FileFields. La riga 59 deve diventare "if ($ (this) .find ('input [type = file]'). Val() || $ (this) .find ('p.file-upload'). Length) {" per verificare se ha già caricato un file o ha un file in attesa di caricamento. Inoltre, funziona su StackedInline, non su TabularInline (fuori dalla scatola, comunque). – mrooney