2016-06-15 8 views
1

In diesem Modell möchte ich den Namen der Datei in ImagefieldÄndern von Dateinamen beim Hochladen in Django id Imagefield

class Product(models.Model): 
    image = models.ImageField(upload_to=content_file_name) 
    name = models.CharField(max_length=100) 
    amount = models.PositiveIntegerField() 

    class Meta: 
     ordering = ('name',) 

    def __str__(self): 
     return self.name 

den Namen zu ändern, der Bild

hochgeladen ändern Ich bin mit dieser Funktion
def content_file_name(instance, filename): 
    ext = filename.split('.')[-1] 
    filename = '%s.%s' % (instance.id, ext) 

    return os.path.join('products', filename) 

aber der Name meines Bildes ist keine, wenn ich andere Felder wie 'Name' verwenden, funktioniert es. Was soll ich tun, um den Namen mit ID zu ändern? Vielen Dank!

Antwort

3

Die id der Instanz noch nicht erstellt, weil die upload_to Funktion vor das neue Objekt zuerst in die Datenbank geschrieben aufgerufen wird.

In den meisten Fällen wird diese Aufgabe noch nicht in der Datenbank gespeichert sind, so dass, wenn es die Standard-Autofield verwendet, es vielleicht noch nicht einen Wert für seine Primärschlüsselfeld haben.

Schwerpunkt von den Django docs

zwei Alternativen:

Verwenden Sie einen uuid.uuid4() Wert, ist es einfach zu erstellen und so einzigartig wie die pk.

Ein anderer Vorschlag, wenn Sie sich für Suchmaschinen und SEO interessieren, verwenden Sie eine slugify(instance.name), damit Ihre Bilder einfacher in der Bildsuche von Suchmaschinen gefunden werden können.

+0

danke für Anregungen, ich werde sie versuchen. Danke noch einmal. –

Verwandte Themen