Django FileField avec upload_to déterminé au moment de l'exécution
Je suis en train de configurer mon télécharge de sorte que si l'utilisateur joe télécharge un fichier, il va à MEDIA_ROOT/joe plutôt que d'avoir tous les fichiers d'aller à MEDIA_ROOT. Le problème est que je ne sais pas comment définir ce dans le modèle. Voici comment il n'y paraît actuellement:
class Content(models.Model):
name = models.CharField(max_length=200)
user = models.ForeignKey(User)
file = models.FileField(upload_to='.')
Donc est ce que je veux au lieu de '.' comme le upload_to, ont-il le nom de l'utilisateur.
Je comprends que comme de Django 1.0 vous pouvez définir votre propre fonction pour gérer le upload_to mais cette fonction n'a aucune idée de l'identité de l'utilisateur seront donc je suis un peu perdu.
Merci pour l'aide!
Vous devez vous connecter pour publier un commentaire.
Vous l'avez probablement lu la documentation, donc voici un exemple facile à faire sens:
Comme vous pouvez le voir, vous n'avez même pas besoin d'utiliser le nom de fichier donné, vous pourriez remplacer dans votre upload_to appelable trop si vous avez aimé.
Content
id de classe, avant de l'enregistrer? Je voudrais préfixe ou un suxe supplémentaire le nom de fichier avec l'id de l'objet, afin que je puisse savoir à qui appartient le fichier.os.path.join
au lieu de'/'.join
pour s'assurer qu'il fonctionne aussi sur pas-de systèmes Unix. Ils peuvent être rares, mais c'est bien pratique 😉os.path.join
. Vous avez affaire à un Django de stockage, et non pas directement le système d'exploitation et il s'attend '/' sur les deux environnements.makemigrations
légitimement se plaint.Cela m'a vraiment aidé. Pour un peu plus de souci de concision, a décidé d'utiliser lambda dans mon cas:
pk
avant de l'enregistrer. Elle ne fonctionne que pour les mises à jour ne créations (inserts).migrations
des opérations, car il ne peut pas être sérialisé en fonction de la docsUne remarque sur l'utilisation de la "instance" de l'objet de valeur de clé primaire. Selon la documentation:
Par conséquent, la validité de l'utilisation de pk dépend de votre modèle particulier est défini.
Si vous avez des problèmes avec les migrations, vous devriez probablement utiliser
@deconstructible
décorateur.Utilisation: