2017-12-19 2 views
0

Ich habe ein Problem. Ich versuche, das Verzeichnis, in dem eine Datei hochgeladen wird, zu ändern, indem ich das upload_to-Attribut eines FileFields nutze, ohne Erfolg.Überschreiben Feldattribut in Django Modell

Das Hauptproblem ist, dass ich eine Elternklasse mit einem Dateiattribut definiert habe, und ich möchte das Verzeichnis in der Kindklasse ändern.

Meine Modelle sind auf diese Weise definiert:

class DocumentBase(models.Model): 
    file = models.FileField(upload_to=get_filename) 


class Document(DocumentBase): 
    file_type = models.CharField(max_size=150) 

Ich versuchte, die in der Filefield Kind-Klasse zu überschreiben, ohne Erfolg

ich (ich bin jetzt bewusst, dass dies nicht möglich ist.) versuchte auch die Antworten auf diese other question (das ist sehr ähnlich zu meinem Problem), ohne Erfolg.

Könnte mir jemand dabei helfen? Vielen Dank!

Antwort

1

Wie Willem sagte, kann dies behoben werden Affen Patching der upload_to Attribut. Aber für diesen Fall hat es nicht funktioniert.

In die FileField class definition graben, hat diese Klasse ein anderes Attribut: generate_filename. Dieses Attribut ist gefüllt, wenn upload_to aufrufbar ist. Dieses Attribut wird verwendet, um den Dateinamen der Datei zu generieren.

die Lösung also, die gearbeitet wurde:

class DocumentBase(models.Model): 
    file = models.FileField(upload_to=get_filename) 


class Document(DocumentBase): 
    file_type = models.CharField(max_size=150) 

Document._meta.get_field('file').generate_filename = other_get_filename 

Dieses Verhalten auf Django 1.10 ändert.

Verwandte Themen