Django-使用.values()时获取绝对URL

时间:2019-06-17 16:27:52

标签: django django-models django-orm

我的用户模型包含很多字段

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。我如何获取绝对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'}
]>

1 个答案:

答案 0 :(得分:0)

实际上,一周前我在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调试器中的所有属性。如果您对此仍有疑问,可以在评论中提问。