【问题标题】:Django - Get the absolute URL when using .values()Django - 使用 .values() 时获取绝对 URL
【发布时间】:2019-06-17 16:27:52
【问题描述】:

我有一个包含许多字段的用户模型

class User(AbstractBaseUser, PermissionsMixin):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    email = models.EmailField(max_length=255, unique=True)
    username = models.SlugField(max_length=255, unique=True)
    first_name = models.CharField(max_length=255, blank=True, null=True)
    last_name = models.CharField(max_length=255, blank=True, null=True)
    avatar = models.ImageField(upload_to='users/avatar', default='users/avatar/avatar.png')
    last_login = models.DateTimeField(blank=True, null=True)
    member_since = models.DateTimeField(default=timezone.now, db_index=True)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)

在特定视图中,我只对检索用户的用户名和头像感兴趣,因此我可以返回 JSON 响应,因此我执行以下操作:

users = User.objects.values('username', 'avatar')

这将返回一个包含以下数据的字典列表:

<QuerySet [
    {'username': 'A', 'avatar': 'users/avatar/avatar.png'}, 
    {'username': 'B', 'avatar': 'users/avatar/avatar.png'}, 
    {'username': 'C', 'avatar': 'users/avatar/avatar.png'}
]>

请注意,头像的 URL 是相对的。如何在不检索用户的所有字段的情况下获取绝对 URL?

我想得到以下内容:

<QuerySet [
    {'username': 'A', 'avatar': 'http://example.com/media/users/avatar/avatar.png'}, 
    {'username': 'B', 'avatar': 'http://example.com/media/users/avatar/avatar.png'}, 
    {'username': 'C', 'avatar': 'http://example.com/media/users/avatar/avatar.png'}
]>

【问题讨论】:

    标签: django django-models django-orm


    【解决方案1】:

    实际上,一周前我在 Django 中遇到了同样的问题,我从一个对象获取图像名称,但我想访问图像 URL。

    所以我正在做的是,我正在检索一个项目,如下所示:

    items = Item.objects.all()
    
    for item in items:
        print({'item_name':item.name, 'item_url': item.image})
    

    所以上面的代码给了我项目名称和项目图像名称而不是项目 url,所以我更深入地检查了 item.image 属性,我从 item.image.url 获得了 URL

    for item in items:
        print({'item_name':item.name, 'item_url': item.image.url})
    

    所以在你的情况下,你可以这样做:

    users = User.objects.values('username', 'avatar')
    for user in users:
        print({'username': user.username, 'avatar': avatar.image.url})
    

    如果您仍然无法在 avatar.image.url 中获取您的图片 URL,那么只需尝试 avatar.image。并检查 python 调试器中的所有属性。如果您对此仍有任何疑问,可以在评论中提问。

    【讨论】:

    猜你喜欢
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 2015-08-25
    • 2016-02-02
    • 2013-09-25
    • 2012-05-06
    相关资源
    最近更新 更多