Djangos FileField mit upload_to zur Laufzeit bestimmt
Ich versuche mit meinen uploads, so dass, wenn Benutzer joe eine Datei hochlädt, es geht um MEDIA_ROOT/joe im Gegensatz zu, dass alle Dateien gehen MEDIA_ROOT. Das problem ist, ich weiß nicht, wie zu definieren, diese in das Modell. Hier ist, wie es derzeit aussieht:
class Content(models.Model):
name = models.CharField(max_length=200)
user = models.ForeignKey(User)
file = models.FileField(upload_to='.')
Also, was ich möchte, ist anstelle von '.' als upload_to, Sie haben den Namen des Benutzers.
Ich verstehe, dass, wie der Django 1.0 definieren Sie Ihre eigene Funktion zum behandeln der upload_to aber die Funktion hat keine Ahnung, wer der Benutzer wird entweder so bin ich ein wenig verloren.
Danke für die Hilfe!
InformationsquelleAutor Teebes | 2009-07-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie wahrscheinlich Lesen Sie die Dokumentation, also hier ist ein einfaches Beispiel, um es sinnvoll:
Wie Sie sehen können, Sie nicht sogar brauchen, zu verwenden, die mit dem Namen gegeben - könnte man überschreiben, die in Ihrem upload_to aufrufbar, auch wenn Sie mochte.
Funktioniert das mit ModelForm? Ich kann sehen, dass beispielsweise hat alle Attribute der Klasse Modell, aber es gibt keine Werte (nur eine str von der Feld-name). In der Vorlage, Benutzer ausgeblendet. Ich habe zu eine Frage zu stellen, ich habe schon googeln dieses für Stunden.
Seltsamerweise ist dies Versagen mir im Grunde das gleiche setup. Instanz.Benutzer hat keine Attribute.
Sie möchten möglicherweise verwenden Sie
os.path.join
statt'/'.join
um sicherzustellen, dass es funktioniert auch auf nicht-Unix-Systemen. Sie sind zwar selten, aber es ist gute übung 😉Hallo, ich habe versucht den gleichen code, legen Sie Sie in die models.py, bekomme aber error Content-Objekt hat kein Attribut 'user'.
InformationsquelleAutor SmileyChris
Diese wirklich geholfen. Für ein bisschen mehr der Kürze halber, entschieden lambda in meinem Fall:
Auch wenn Sie nicht bekommen, lambda, um die Arbeit mit der str(Instanz.pk) ist eine gute Idee, wenn Sie Probleme mit den Dateien überschreiben, wenn Sie nicht wollen, zu.
Instanz nicht über ein
pk
vor dem speichern. Es funktioniert nur für updates, die nicht-Kreationen (inserts).lambda funktioniert nicht in
migrations
Operationen, weil es kann nicht serialisiert werden, gemäß der docsInformationsquelleAutor gdakram
Einen Hinweis auf die Verwendung der 'instance' - Objekt ' s pk-Wert. Gemäß der Dokumentation:
Daher die Gültigkeit der Verwendung von pk hängt davon ab, wie Ihr Modell definiert ist.
InformationsquelleAutor Max Dudzinski