我的用户模型包含很多字段
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'}
]>
答案 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调试器中的所有属性。如果您对此仍有疑问,可以在评论中提问。