在Django中为每个用户自动创建一个文件夹,并在该文件夹中保存tensorflow权重



所以我想为每个用户自动创建一个文件夹,这是我的模型.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)

最新更新