Je souhaite donc créer un dossier automatiquement pour chaque utilisateur, voici mon models.py:

Models.py

#Creating a folder automatically for each user
def folder_path(instance, filename):
    return "user_{0}/MyFolder/{1}".format(instance.user.id, filename)



# Create your models here.
class SLRModel(models.Model):
    user = models.ForeignKey(User, on_delete= models.CASCADE, default= None)
    my_folder = models.FileField(upload_to= folder_path, default= None)
0
user14163978 25 août 2020 à 16:34

2 réponses

Meilleure réponse

Réponse 1:

Option 1

from_the_docs: vous peut opter pour le modèle utilisateur personnalisé . Ca fait plutot comme ca:

class MyUser(AbstractUser):
    USERNAME_FIELD = 'username'

    weights_dir = models.CharField('Weights Directory')

    def save(self, *args, **kwargs):
        if self.weights_dir is None:
            self.weights_dir = "user_{0}/MyFolder/{1}".format(self.id, self.username)
            # add creating directory code here

        super(AbstractUser, self).save(*args, **kwargs)

Et dans settings.py ensemble

AUTH_USER_MODEL = 'yourappname.MyUser'

Vous devrez également mettre à jour le fichier admin.py:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User

admin.site.register(User, UserAdmin)

N'oubliez pas de migrer après ces changements.

Option 2

Si vous n'êtes pas à l'aise pour implémenter un modèle utilisateur personnalisé et que vous voulez utiliser celui par défaut, vous pouvez utiliser le signal post_save, from_the_docs. Quelque chose comme:

from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=User)
def create_directory(sender, instance, created, **kwargs):
    if created:
        pass # add create directory code here

Réponse 2:

Dans views.py, vous pouvez faire quelque chose comme ceci:

from django.http import HttpResponse

def home(request):
    # add wigths save code here
    return HttpResponse("Weights Created.")
0
from_the_docs 25 août 2020 à 14:08

#Creating a folder automatically for each user
def folder_path(instance, filename):
    user = instance.user.username
    basename, file_extension = filename.split(".")
    new_filename = "%s-%s.%s" %(user, instance.id, file_extension)
    return "MyFolder/%s/%s" %(user, new_filename)


# Create your models here.
class SLRModel(models.Model):
    user = models.ForeignKey(User, on_delete= models.CASCADE, default= None)
    my_folder = models.FileField(upload_to= folder_path, default= None)

0
satyajit 26 août 2020 à 08:07