models.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from django.db import models
  2. from folder.models import Folder
  3. from account.models import User
  4. from group.models import Group
  5. # 引入内置信号
  6. from django.db.models.signals import post_delete
  7. # 引入信号接收器的装饰器
  8. from django.dispatch import receiver
  9. import os
  10. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  11. # 文件表
  12. class File(models.Model):
  13. # 文件id
  14. file_id = models.AutoField(primary_key=True)
  15. # 文件名
  16. file_name = models.CharField(max_length=50, blank=False)
  17. # 从属的文件夹
  18. father_folder = models.ForeignKey(Folder, on_delete=models.CASCADE, related_name='children_files')
  19. # 上传时间
  20. update_time = models.DateTimeField()
  21. # 文件类型
  22. file_type = models.CharField(max_length=32)
  23. # 文件大小
  24. file_size = models.CharField(max_length=16)
  25. key = models.CharField(max_length=1024)
  26. owner = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name='files')
  27. group = models.ForeignKey(Group, on_delete=models.DO_NOTHING, related_name='files', null=True)
  28. def to_json(self):
  29. return {'file_id': self.file_id,
  30. 'file_name': self.file_name,
  31. 'father_folder_id': self.father_folder_id,
  32. 'update_time': self.update_time,
  33. 'file_type': self.file_type,
  34. 'file_size': self.file_size}
  35. # 信号接收函数,每当删除file时自动删除文件
  36. @receiver(post_delete, sender=File)
  37. def delete_file(sender, instance, **kwargs):
  38. os.remove(BASE_DIR + '/' + str(instance.file_id))