Python Django ImageField问题

Python Django ImageField问题,python,django,django-models,Python,Django,Django Models,我有一个相似的模型 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) 正如我

我有一个相似的模型

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.
那么,我如何才能提取所有拥有照片的学生

对此,任何形式的帮助都将不胜感激。 提前感谢。

它不起作用,因为它只适用于其他型号。这里,
name
photo
字段返回值上的一个属性

请尝试以下方法:

Student.objects.exclude(photo__isnull=True)
最好使用
isnull
,而不是将相等与
None
进行比较

编辑: 委员会建议:

Student.objects.exclude(photo='')

他说,过滤是对存储在DB中的实际值执行的。在文件字段的情况下,指向文件的路径。

它不起作用。它实际上返回所有students对象。可能是因为photo字段实际上是一个像这样的photo对象,所以它总是返回True。查询是针对存储在数据库中的值执行的,该值是照片的位置。您可以尝试类似Student.objects.exclude(photo='')的方法。只有当值实际存储为null时,isnull才起作用。如果条目是通过管理员创建的,它将得到一个空白值(空字符串),而不是null。@杰夫:我已经添加了你的建议。但我怀疑空值将是None/NULL,而不是长度为零的字符串。在字符串列上设置null=True不是一个好主意。导致无和“”之间的歧义。