2010-11-23 4 views
16

Das bringt mich um!Django: manuelles Erstellen von imagefield im Modell von einer vorhandenen Datei auf dem Server

Ich benutze django-filebrowser, und ich möchte eine Galerie-App erstellen, die ihre Upload-Fähigkeiten nutzt, um Bilder zu verwalten.

Ich habe ein Gallery-Modell, mit dem der Benutzer ein Verzeichnis auf dem Server auswählen oder erstellen und Dateien in diesen Ordner hochladen kann, um in der Galerie angezeigt zu werden. Ich möchte automatisch das Verzeichnis durchsuchen, in das der Benutzer Bilder hochgeladen und ausgewählt hat, und dann automatisch Image-Instanzen für jedes Bild im Ordner erstellen.

class Gallery(model.Models): 
    gallerydirectory = FileBrowserField(...) 
    title = ... 
    description ... 

class Image(model.Models): 
    image_field = models.ImageField() 

Das Problem ist, dass Filebrowser Bilder anders Django darstellt, aber ich will django ImageFields verwenden, wie ich dann andere Anwendungen (SORL Thumbnails) auf der Vorlage Ende verwenden kann.

Ich habe alle notwendigen Daten für die Datei, d. H. Dateiname, Pfad usw. Ich kann Django einfach nicht dazu bringen, eine Instanz eines ImageFields zu erstellen, ohne das Bild erneut hochzuladen. Ich möchte es einfach bevölkern.

Ich habe einen weiteren Thread here gesehen, die folgende schlägt vor:

for image in filebrowser_image_objects_list: 
    f = File(open('path-to-file-on-server','r')) 
    i = Image() 
    i.image_field('filename.png',f.read()) 

aber das gibt mir ein:

SuspiciousOperation error 
Attempted access to '/filename.png' denied 

die, dass der Pfad nicht korrekt gelesen werden, wird suggeriert. Ich habe die Attribute des Dateiobjekts gedruckt, und es öffnet das richtige Bild, es wird nur nicht an das ImageField weitergegeben

Hilfe wäre sehr zu schätzen!

UPDATE

Ich habe es aufgegeben, diese Arbeit zu bekommen, da es einfach zu chaotisch. Das Problem, das ich oben hatte, war, dass ich das upload_field des ImageField auf '/' gesetzt hatte und es unbemerkt geblieben war, was bedeutete, dass die Datei in '/etwas.png' geschrieben wurde.

Ich habe es so geändert, dass das Image jetzt auch ein FileBrowserField anstelle eines ImageFields verwendet.

Antwort

3

ich etwas fehlt könnte, aber das ist für mich:

from a1.models import Model1                
from django.core.files.images import ImageFile 
m = Model1.objects.create()                 
m.f1 = ImageFile(open("1.png", "rb"))  
m.save() 

für das folgende Modell:

class Model1(models.Model):     
    f1 = models.ImageField() 

Auf diese Weise hat es nicht funktioniert:

m.f1('1.png', File.read(open('1.png', 'r'))) 

Dort heißt es:

TypeError: 'ImageFieldFile' object is not callable 

mit Django 1.7, 1.11 geprüft.

Verwandte Themen