Ich habe einige Django-Modelle, die ein FileField verwenden, und Benutzer haben Dateien in die Admin-Oberfläche hochgeladen. Wir haben jetzt ein Problem, dass einige Dateien ziemlich groß sind (1-3G), was das Hochladen von http erschwert.
Es gibt eine "Container" -Klasse und dann "file" -Klassen mit einem FK zum Container. Ich habe Inlines in der Admin-GUI verwendet, um dies für die Benutzer einfacher zu machen (Containerklassenform mit Dateiklasseninline)
Ich habe FilePathField gefunden, was ich für nützlich halte, damit Benutzer scp / rsync Dateien auf den Server übertragen und dann nach ihnen suchen und Details hinzufügen können, aber wie kann ich das im Admin bekommen? Muss ich nur ein neues Formular erstellen, das die Objekte erstellt? Gibt es eine Möglichkeit, das Modell in einem benutzerdefinierten Admin-Formular irgendwie zu überschreiben (und so alle freien Admin-Güte zu behalten), das Dateifeld durch Dateipfad ersetzt? Irgendwelche anderen Vorschläge?
Danke für Anregungen!
Sie erwähnen, dass FilePathField
funktioniert, aber der Webserver muss neu gestartet werden, um neue Dateien zu sehen. Dies geschieht, weil die Optionen FilePathField.__init__
gesammelt werden, was beim Importieren des Moduls einmal genannt wird.
Eine Lösung wäre, das __init__
des Feldes in der __init__
des Formulars erneut aufzurufen:
(So wird das Verzeichnis jedes Mal gescannt, wenn das Formular instanziiert wird.)
Ich bin kein Experte in der Übertragung von großen Dateien, aber wenn Ihre Benutzer in der Lage sein sollten, dies ohne "UNIX-Beschwörungen" zu tun, würde ich vorschlagen, ein Java-Applet dafür zu erstellen. Es wäre eine Menge Arbeit, aber dann könntest du einen richtigen Fortschrittsbalken haben usw.
Ich bin mir nicht sicher, ob ich verstanden habe, was Sie in den Admin-Bereich aufnehmen möchten. Suchen Sie nach einer Möglichkeit, den Datei-Upload-Prozess mit einem anderen Übertragungsprotokoll als HTTP zu automatisieren?
Wenn dies der Fall ist, können Sie ein Modell mit einem einfachen CharField (oder einem URLField) erstellen und dann eine rsync- oder scp-Kopie ausführen, wenn das Objekt gespeichert wird. Zum Beispiel:
%Vor%Dies ist ein sehr grobes Beispiel, aber es sollte Ihnen helfen, etwas herauszufinden. Sie müssen sicherstellen, dass Ihre Routine sicher ist (fehlerhafte Pfade könnten beispielsweise einem Benutzer ermöglichen, beliebige Aktionen auszuführen). Außerdem wird dies wahrscheinlich die Django-Speicherroutine beim Kopieren über eine Datei blockieren , so dass Sie Ihren bevorzugten Befehl in einem separaten Prozess ausführen sollten.
Viel Glück!
Tags und Links django file-upload