【发布时间】:2022-01-11 06:23:30
【问题描述】:
所以我有一个名为User 的模型,它有一个avatar 字段,它只是用户的头像。每当用户选择删除他们的头像时,我希望能够删除该文件。正如您在下面的view.py 中看到的那样,我从request 检索当前用户对象(这是因为我从给出的访问令牌中获取用户uuid 以发出请求,然后查询用户对象)。然后我在avatar 属性上调用delete,但我不知道这是否真的也删除了文件。我的假设是它只是删除了该属性url。 删除模型中的 ImageField 属性时,如何删除与 ImageField 关联的文件?
model.py
class User(AbstractDatesModel):
uuid = models.UUIDField(primary_key=True)
username = models.CharField(max_length=USERNAME_MAX_LEN, unique=True, validators=[
MinLengthValidator(USERNAME_MIN_LEN)])
created = models.DateTimeField('Created at', auto_now_add=True)
updated_at = models.DateTimeField('Last updated at', auto_now=True, blank=True, null=True)
avatar = models.ImageField(upload_to=avatar_directory_path, blank=True, null=True)
view.py
@api_view(['POST', 'DELETE'])
def multi_method_user_avatar(request):
if request.method == 'POST':
# Some POST code
elif request.method == 'DELETE':
try:
request.user.avatar.delete()
request.user.save()
return Response(status=status.HTTP_204_NO_CONTENT)
except Exception as e:
return Response(dict(error=str(e), user_message=generic_error_user_msg),
status=status.HTTP_400_BAD_REQUEST)
【问题讨论】:
-
这能回答你的问题吗? Django delete FileField
-
@HaoLan 是的,我会这么说,但下面的人给出了更快更直接的答案。
-
我只想告诉你,在提出问题之前尝试搜索问题。
-
而做
os.remove不是一个好方法,如果你使用其他文件系统,而不是本地文件系统,比如对象存储。 -
@HaoLan 我搜索过。我只是不确定 ImageFileField 和 FileField 之间是否存在不同的复杂性。例如,也许 ImageFileField 内置了删除文件的功能。