2016-03-22 2 views
0

Das ist mein models.py:Wie kann ich die Variable im Pfad von ImageField von Django setzen?

class Group_Photo(models.Model): 

    group_id = models.ForeignKey(Group) 
    photo = models.ImageField(upload_to="static/image/group/" + group_id + "/") 

Ich mag würde Bilder in einem Verzeichnis laden, die für eine Gruppe ist. Zum Beispiel, wenn die group_id = 3,

upload_to="static/image/group/3/"

Wie soll ich tun?

Entschuldigung, das ist der Fehler.

File "/models.py", line 161, in Group_Photo photo = models.ImageField(upload_to="static/image/group/" + group_id + "/") TypeError: Can't convert 'ForeignKey' object to str implicitly

+0

erzeugt dieser Code einen Fehler? Was wird ausgegeben, wenn Sie versuchen, Ihren Code auszuführen? – Renier

+0

@Renier Leider habe ich vergessen, den Fehler zu schreiben. Ich fügte hinzu. – yamachan

+0

@Someone, der "nein, du kannst nicht" gesagt hat Wenn ich Bilder nicht in mehrere Verzeichnisse hochladen kann, muss ich nur in ein Verzeichnis hochladen? – yamachan

Antwort

5

upload_to Das Argument kann eine Funktion sein, as described in the documentation:

def group_based_upload_to(instance, filename): 
    return "image/group/{}/{}".format(instance.group.id, filename) 

class Group_Photo(models.Model): 
    group = models.ForeignKey(Group) 
    photo = models.ImageField(upload_to=group_based_upload_to) 

Die Funktion nimmt zwei Argumente - Instanz des Modells, zu dem die Datei angehängt wird, und den ursprünglichen Namen der Datei. Es muss einen relativen Pfad zurückgeben, unter dem die Datei gespeichert wird. Es wird an den Pfad angehängt, der in der MEDIA_ROOT Einstellung definiert ist.

Das obige Beispiel verwendet Verzeichnisse basierend auf der numerischen ID der Gruppe. Sie können natürlich andere Felder verwenden, um zum Beispiel den Slug zu verwenden (falls er einen hat), ersetzen Sie einfach instance.group.id durch instance.group.slug.

+0

Vielen Dank. Mein japanisches Dokument erwähnt das nicht. Ich werde das jetzt versuchen. – yamachan

+0

Danke. Als ich mit Runserver gestartet habe, ist kein Fehler aufgetreten. Ich werde das Upload-Formular später implementieren. – yamachan

Verwandte Themen