【问题标题】:creating a folder automatically for each user in Django + saving tensorflow weights in that folder在Django中为每个用户自动创建一个文件夹+在该文件夹中保存张量流权重
【发布时间】:2020-08-25 13:34:49
【问题描述】:

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

【问题讨论】:

    标签: python django api rest django-rest-framework


    【解决方案1】:

    答案 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

    如果您不习惯实现自定义用户模型并希望使用默认用户模型,您可以使用 post_save 信号 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.")
    

    【讨论】:

      【解决方案2】:
      
      #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)
      
      

      【讨论】:

      • 感谢您的回复,如果我想创建文件夹,如何在views.py中调用它,然后再保存任何内容?
      • 简而言之,您到底想实现什么?
      • 请看一下这个link。希望对您有所帮助。
      • 我意识到我错了,现在最后一个问题我只想调用函数来为用户创建文件夹,我在views.py中如何调用它。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多