from django.db import models from folder.models import Folder from account.models import User from group.models import Group # 引入内置信号 from django.db.models.signals import post_delete # 引入信号接收器的装饰器 from django.dispatch import receiver import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 文件表 class File(models.Model): # 文件id file_id = models.AutoField(primary_key=True) # 文件名 file_name = models.CharField(max_length=50, blank=False) # 从属的文件夹 father_folder = models.ForeignKey(Folder, on_delete=models.CASCADE, related_name='children_files') # 上传时间 update_time = models.DateTimeField() # 文件类型 file_type = models.CharField(max_length=32) # 文件大小 file_size = models.CharField(max_length=16) key = models.CharField(max_length=1024) owner = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name='files') group = models.ForeignKey(Group, on_delete=models.DO_NOTHING, related_name='files', null=True) def to_json(self): return {'file_id': self.file_id, 'file_name': self.file_name, 'father_folder_id': self.father_folder_id, 'update_time': self.update_time, 'file_type': self.file_type, 'file_size': self.file_size} # 信号接收函数,每当删除file时自动删除文件 @receiver(post_delete, sender=File) def delete_file(sender, instance, **kwargs): os.remove(BASE_DIR + '/' + str(instance.file_id))