2017-06-01 3 views
1

Ich bezog mich auf diese youtube video, um zu verstehen, wie Bild mit ImageField hochladen. Er hat erklärt, wie man die instance.id verwendet, während das Bild gespeichert wird. Ich habe es versucht, aber instance.id gibt None zurück. Für ihn hat es perfekt funktioniert. Im Folgenden ist der Code:Django - mit instance.id beim Hochladen Bild

#models.py 
import os 

def get_image_path(instance, filename): 
    return os.path.join(str(instance.id), filename) 

class AdProfile(models.Model): 
    name = models.CharField(max_length=100) 
    profile_image = models.ImageField(upload_to=get_image_path, blank=True, null=True) 

Jedes Mal, wenn die Datei gespeichert wird, seine Spar als None/filename.

Auch diese link informiert das gleiche. Ich benutze Django 10.5 und MySQL Datenbank.

Was könnte das Problem sein. Freundlich helfen.

+0

Ermitteln, wie Sie die Datei hochladen und wenn 'save()' aufgerufen? –

+0

Ich habe die Datei über das Admin-Panel hochgeladen. Es schreibt keine zusätzliche 'save()' Methode. – Jeril

+0

Ja, das ist das Problem, das du dem Admin 'save()' mitteilen musst, um 'get_image_path' zu verwenden. Ich schreibe jetzt die Antwort. –

Antwort

3

Django admin hat irgendwie die Funktion get_image_path aufgerufen, ohne das Modell in der Datenbank zu speichern, daher ist id keine. Wir können django Modell mit save Methode überschreiben und sicherstellen, dass Bild gespeichert wird und get_image_path die Instanz mit der ID

+0

Du bist großartig. Es hat perfekt wie erwartet funktioniert. Danke vielmals. – Jeril

+0

Froh, es hat funktioniert! Vielen Dank! –

+0

gibt es eine Möglichkeit, das gleiche zu tun, während 'views.py'? – Jeril