Django ImageField问题

aat*_*ifh 10 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)
Run Code Online (Sandbox Code Playgroud)

我们可以看到照片字段是可选的.我希望所有将他们的图像保存在大学数据库中的学生.为此,我做到了这一点

>>> Student.objects.exclude(photo__name=None)
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

FieldError: Join on field 'photo' not permitted.
Run Code Online (Sandbox Code Playgroud)

那么,我怎样才能提取所有那些有照片的学生呢?

对此有任何帮助将不胜感激.提前致谢.

muh*_*huk 13

它不起作用,因为字段查找仅适用于其他模型.这里name是您photo字段返回值的属性.

试试这个:

Student.objects.exclude(photo__isnull=True)
Run Code Online (Sandbox Code Playgroud)

优选使用isnull而不是比较等式None.

编辑:

杰夫奥伯的建议:

Student.objects.exclude(photo='')
Run Code Online (Sandbox Code Playgroud)

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

  • 对存储在数据库中的值执行查询,该值是照片的位置.你可以试试像Student.objects.exclude(photo ='')这样的东西.isnull仅在值实际存储为null时有效.如果通过admin创建条目,它将获得空值(空字符串)而不是null. (4认同)