Django ImageField问题

10 投票
1 回答
3553 浏览
提问于 2025-04-15 11:32

我有一个类似的模型

Class Student(models.Model):
"""A simple class which holds the basic info
of a student."""

name = models.CharField(max_length=50)
age = models.PositiveIntegerField()
photo = models.ImageField(upload_to='foobar', blank=True, null=True)

从上面的代码可以看出,照片字段是可选的。我想要获取所有在学校数据库中有保存照片的学生。为此,我做了这个

>>> Student.objects.exclude(photo__name=None)

但是我遇到了这个错误:

FieldError: Join on field 'photo' not permitted.

那么,我该如何提取所有有照片的学生呢?

任何关于这个问题的帮助都非常感谢。提前谢谢大家。

1 个回答

13

这个问题出现的原因是因为字段查找只能在其他模型上使用。在这里,name是你photo字段返回值上的一个属性。

你可以试试这样做:

Student.objects.exclude(photo__isnull=True)

建议使用isnull来判断是否为空,而不是直接和None比较。

编辑:

Jeff Ober的建议:

Student.objects.exclude(photo='')

他说过滤是基于存储在数据库中的实际值进行的。在文件字段的情况下,就是文件的路径。

撰写回答