所以我想为每个用户自动创建一个文件夹,这是我的模型.py:
型号.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)
答案1:
选项1
from_the_docs:您可以选择自定义用户模型。它是这样的:
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)
并且在settings.py
中设置
AUTH_USER_MODEL = 'yourappname.MyUser'
您还需要更新admin.py
文件:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
admin.site.register(User, UserAdmin)
不要忘记在这些更改之后进行迁移。
选项2
如果您不愿意实现自定义用户模型,并且希望使用默认用户模型,则可以使用postrongave信号from_the_docs。类似于:
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
答案2:
在views.py
中,您可以执行以下操作:
from django.http import HttpResponse
def home(request):
# add wigths save code here
return HttpResponse("Weights Created.")
#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)