我正在尝试限制用户存储我已经设置了外键,但我想知道如何才能实现这一点。如果有人能指出我正确的方向,我就会陷入困境。
这是我的model.py
class Document(models.Model):
docfile = models.FileField(upload_to=only_filename)
created_at = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, related_name='uploaded_files')
答案 0 :(得分:2)
更改设置变量FILE_UPLOAD_MAX_MEMORY_SIZE以限制最大大小 检查此uploadfile
答案 1 :(得分:0)
您是否试图为用户提供存储空间的总大小限制?每个用户都有相同的金额,还是可以不同?
我认为如果它可能不同,您首先需要一个custom user model或其他一些跟踪用户存储限制的模型。或者,如果您只是让所有用户都具有相同的限制,则可以跳过创建模型。
之后,您需要一些程序来计算用户使用的存储空间。实现这一目标的一种方法是将upload_to
字段上传到特定于用户的目录,例如:
class Document(models.Model):
docfile = models.FileField(upload_to=USERNAME + '/' + only_filename)
然后,在文件上传之前的某个地方,你可以做这样的事情(在带参数的自定义模型验证器的views.py中?):
import os
def get_user_storage(username):
user_files = os.listdir(os.path.join(os.path.abspath(UPLOAD_PATH), username)
total = sum(os.path.getsize(fl) for fl in user_files)
return total < WHATEVER_THE_MAXIMUM_IS
一旦你有这个功能,你传递一个用户名,如果用户没有超过他们的存储,它会返回True
,如果他们有,则返回False
。这个问题的一个大问题是它将返回True
,直到用户超过他/她的存储空间,但它并不关心多少。因此,如果您将存储限制设置为1gb,并且没有先前上传的文件的用户上传了一些特殊内容,则此功能本身就可以实现。
为防止这种情况发生,您可以设置最大文件上传限制。
我没有尝试过任何此类代码,但我认为它可能会让您开始拼凑解决方案。