【发布时间】:2022-01-16 16:37:04
【问题描述】:
所以我有这个模型
model.py
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)])
class LikePost(AbstractSimpleModel):
creator = models.ForeignKey(
User, on_delete=models.CASCADE, related_name="like_post")
post = models.ForeignKey(Post)
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)
然后我还有这个注释器,用于在 Post 表之外返回一堆数据
annotator.py
def query_to_full_post_data_serializer(post_query_set: QuerySet):
query_set_annotated = post_query_set.annotate(
creator_username=F('creator__username'),
user_liked=F(<flag for each post in query for if user liked the post>)
reply_count=Count('postreply', distinct=True),
like_count=Count('likepost', distinct=True),
).prefetch_related(
Prefetch('photo', Photo.objects.order_by('-created')),
Prefetch('video', Video.objects.order_by('-created'))
)
return FullPostDataSerializer(query_set_annotated, many=True)
我想返回一个名为“user_liked”的字段,如果当前登录的用户喜欢它或者是@的creator,它会为查询集中的每个帖子返回一个布尔值,即True 987654327@ 到Post。当请求进来时,我让当前用户发出请求,这样我就可以得到他们的uuid。我想使用该 uuid 来检查用户是否喜欢查询集中的帖子。 如何检查当前登录的用户是否喜欢查询集 Django 中的 Post 对象?
我假设您可以执行 user_liked=F('likepost', filter=creator__uuid=current_user_uuid) 之类的操作,但这不会是返回用户的布尔值。如果我真的想要,我可以这样做 user_liked=Count('likepost, filter=creator__uuid=current_user_uuid) 不过似乎有点低效。
【问题讨论】: