首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django -返回带有创作者的化身url的帖子

Django -返回带有创作者的化身url的帖子
EN

Stack Overflow用户
提问于 2021-12-13 13:41:22
回答 1查看 112关注 0票数 0

我有一个名为User的类,它有一个ImageField属性,它存储用户的化身/配置文件图片。我试图注释一个Post查询集,以便只返回用户的avatar url和post,而不是其他数据。我尝试过两种不同的方式来注释查询,但是当我用视图来获取帖子时,您可以在下面看到错误。如何将用户avatar url与返回的带注释的Post 查询集附加在一起?

models.py

代码语言:javascript
复制
class User(AbstractDatesModel):
    uuid = models.UUIDField(primary_key=True)
    username = models.CharField(max_length=USERNAME_MAX_LEN, unique=True, validators=[
        MinLengthValidator(USERNAME_MIN_LEN)])
    created = models.DateTimeField('Created at', auto_now_add=True)
    updated_at = models.DateTimeField('Last updated at', auto_now=True, blank=True, null=True)
    avatar = models.ImageField(upload_to=avatar_directory_path, blank=True, null=True)

    @property
    def avatar_url(self):
        return self.avatar.url

class Post(models.Model):
    uuid = models.UUIDField(primary_key=True, default=generate_ulid_as_uuid, editable=False)
    created = models.DateTimeField('Created at', auto_now_add=True)
    updated_at = models.DateTimeField('Last updated at', auto_now=True, blank=True, null=True)
    creator = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name="post_creator")
    body = models.CharField(max_length=POST_MAX_LEN, validators=[MinLengthValidator(POST_MIN_LEN)])

annotator.py

代码语言:javascript
复制
def query_to_full_post_data_serializer(post_query_set: QuerySet):
    query_set_annotated = post_query_set.annotate(
        creator_username=F('creator__username'),
        creator_avatar_url=F('creator__avatar_url')
    )
    return FullPostDataSerializer(query_set_annotated, many=True)

annotator_version_2.py

代码语言:javascript
复制
def query_to_full_post_data_serializer(post_query_set: QuerySet):
    query_set_annotated = post_query_set.annotate(
        creator_username=F('creator__username'),
        creator_avatar_url=F('creator__avatar__url')
    )
    return FullPostDataSerializer(query_set_annotated, many=True)

annotator.py给出了错误:

django.core.exceptions.FieldError: Cannot resolve keyword 'avatar_url' into field. Choices are: avatar, cheer_post, cheer_reply, created, creator_username, followee_id, follower_id, friendship_creator, friendshiprequest, goal_creator, goal_follow, goal_join, post_creator, reply, updated_at, userinterests, username, uuid

annotator_version_2.py给出了错误:

django.core.exceptions.FieldError: Cannot resolve keyword 'url' into field. Join on 'avatar' not permitted.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-14 04:22:46

你应该用这个代替。

代码语言:javascript
复制
def query_to_full_post_data_serializer(post_query_set: QuerySet):
    query_set_annotated = post_query_set.annotate(
        creator_username=F('creator__username'),
        creator_avatar_url=F('creator__avatar')
    )
    return FullPostDataSerializer(query_set_annotated, many=True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70335624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档