【问题标题】:django retrieving objects, empty valuesdjango 检索对象,空值
【发布时间】:2019-05-08 01:59:30
【问题描述】:

我使用Profile.objects.values('id', 'avatar') 从表中检索对象,但我希望当avatar 的值为空时设置为media/profile.png,我的模型

avatar = models.ImageField(upload_to='media', blank=True, default='media/profile.png')

并使用JsonResponse(data, safe=False) 以json 格式返回所有内容

[{"id": "1", "avatar": ""}, {"id": "2", "avatar": ""}, {"id": "3", "avatar": "media/profile.png"}, {"id": "4", "avatar": "media/art_xpr.png"}]

并且在javascript前端使用,但问题是头像在某些情况下是空的。

【问题讨论】:

  • 请不要不要使用.values来构造JSON响应,使用专门用于此任务的东西:serializer
  • 所以你要么编写一个脚本来在你的数据库中添加缺失的值,要么通过 js 在前端设置默认值。在将其发送到前端之前无需在后端进行验证,因为在这种情况下您有一个明确的默认值。

标签: json django django-models


【解决方案1】:

我相信有更好的方法,但这也可行

Profile.objects.annotate(
    avatar_or_default=Case(
        When(avatar='', then=Value('media/profile.png')), 
        default=F('avatar'), 
        output_field=CharField()
    )).values('id', 'avatar_or_default')

输出应该是这样的

<QuerySet [{'id': 1, 'avatar_or_default': 'media/custom.png'}, {'id': 2, 'avatar_or_default': 'media/profile.png'}, {'id': 3, 'avatar_or_default': 'media/profile.png'}]>

【讨论】:

    猜你喜欢
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 2021-12-30
    相关资源
    最近更新 更多