2016-07-21 16 views
0

Mein Modell:Django: Filefield Name Sonderzeichen ersetzt automatisch

class MyFile(models.Model): 
    file = models.FileField(upload_to="myfiles", max_length=500) 
    slug = models.SlugField(max_length=500, blank=True) 

Wenn die Dateinamen enthalten Sonderzeichen, wie zum Beispiel ' ‚(Leerzeichen), werden Sonderzeichen durch Unter automatisch ersetzt werden. Wo (in welcher Funktion) passiert das? Wie kann diese automatische Validierung deaktiviert werden?

Dank

UPDATE

Alle Kommentare zu den folgenden Codes? Danke

""" 
https://docs.djangoproject.com/en/1.9/_modules/django/core/files/storage/#Storage.get_valid_name 
Overwrite get_valid_name() function, 
""" 
class OverwriteStorage(FileSystemStorage): 
    def get_valid_name(self, name): 
     print "name=", name 
     return name 

class MyFile(models.Model): 
    file = models.FileField(upload_to="myfiles", max_length=500, storage=OverwriteStorage()) 
+0

Welche Art von speziellen Char ist das? Einzelzitate? Manchmal ersetzt Ihre Shell diese Zeichen. Es ist so, als würdest du eine neue Datei in deiner Shell mit Sonderzeichen im Dateinamen "anfassen". –

+0

@ShangWang z.B. Raum – BAE

+0

Ihre Lösung ist richtig, wenn Sie es nur für ein Modell verwenden, möchten Sie vielleicht meine aktualisierte Antwort überprüfen, wenn Sie es lieber global – fodma1

Antwort

0

Es hängt von Ihrem Speicher ab. FileField ruft storage.get_valid_name auf der sotrage. ref

Sie können diese Funktion wahrscheinlich überschreiben (abhängig von Ihrem Speicher), aber ich denke, es ist wahrscheinlich besser, sie so zu belassen wie sie ist. Sie können immer das Namensfeld verwenden. Wenn Sie FileSystemStorage verwenden, wird django.utils.text.py aufgerufen, wodurch die Leerzeichen durch Unterstriche ersetzt werden. ref

Edit:

Angenommen, Sie verwenden Sie die Standardeinstellung FileSystemStorage hier ist, wie es außer Kraft zu setzen:

eine Datei erstellen (wahrscheinlich in Ihnen Haupt-app)

storage.py:

from django.core.files.storage import FileSystemStorage 
from django.utils.deconstruct import deconstructible 


@deconstructible 
class CustomFileSystemStorage(FileSystemStorage): 

    def get_valid_name(self, name): 
     return name 

(Sie könnten die @deconstructible Dekorateur fo benötigen r Migrationen)

Jetzt haben Sie zwei Möglichkeiten, diesen Speicher zu verwenden. Sie können explizit in Ihnen Modelle angeben es entweder:

Mein Modell:

class MyFile(models.Model): 
    file = models.FileField(upload_to="myfiles", max_length=500, storage=CustomFileSystemStorage) 
    slug = models.SlugField(max_length=500, blank=True) 

Oder man kann es global festgelegt in Ihrem settings.py:

DEFAULT_FILE_STORAGE = '{yourapp}.storage.CustomFileSystemStorage' 

ref

+0

wie es überschreiben? Irgendwelche Beispiele? – BAE

0

Die Implementierung ist in Django source code. Ich bin mir nicht sicher, wie ich es deaktivieren soll, warum sollte ich es nicht so lassen wie es ist?

Verwandte Themen