如何在Django中按文件名过滤ImageField

8 投票
3 回答
10690 浏览
提问于 2025-04-17 08:53

我在我的模型里添加了一个图片字段,像这样:

class UserImage(models.Model):
    photo = models.ImageField(upload_to='target_path')
    ....

当我保存了一张图片,比如说'a.jpg',然后我想让用户用文件名'a.jpg'来过滤这个模型,我应该怎么写呢:

UserImage.objects.filter(photo.filename='a.jpg')
....

3 个回答

0

你需要用用户图像模型中的photo名称来进行查询。

name = UserImage.objects.all()[0].photo.name
print(name)

media/a.jpg

UserImage.objects.filter(photo=name).all()

或者

UserImage.objects.filter(photo="media/a.jpg").all()

<QuerySet [<UserImage: UserImage object (1)>]>

1

上面的回答是正确的,另外你也可以使用icontains,就像我这样用的。

comment_qs = Upload.objects.filter(title__icontains=str(file_name)).filter(content_type__model='Task')

20

你的建议会导致错误。试试这个:

UserImage.objects.filter(photo='a.jpg')

补充说明:在Django中,上传的路径会加在文件名之前。所以查询也应该类似这样做,比如:

UserImage.objects.filter(photo='images/users/photos/a.jpg')

撰写回答