Django -按类别查询属于目标的帖子?



所以我有一些模型,其中每个类别由目标组成。例如,"健康";是一个类别,"在我的婚礼前减掉10磅";是这一类的一个目标。然后我就有了这个目标的帖子。比如帖子1可能是减肥旅程的第一天等等。我需要能够按类别查询所有帖子,响应应该是字典列表,其中包含:帖子主体,目标标题,创建日期。如何快速查询?我认为目前的方法不太理想。我打算按类别查询进球,而不是按进球查询帖子,但我必须迭代地将目标描述附加到每个帖子,然后返回它。这可能会非常缓慢。我认为理想情况下,我希望按我想要的类别过滤类别,然后加入该类型的目标,然后加入帖子并返回相关列。

class Goal(AbstractBaseModel):
creator_id = models.ForeignKey(
User, on_delete=models.SET_NULL, null=True, related_name="goal_creator_id")
end_date = models.DateField(
'End date', null=True, default=None, blank=True)
category = models.ForeignKey(GoalCategory, on_delete=models.CASCADE)
description = models.CharField(
max_length=255, validators=[MinLengthValidator(5)])
class Post(AbstractBaseModel):
creator_id = models.ForeignKey(
User, on_delete=models.CASCADE, related_name="post_creator_id")
goal_id = models.ForeignKey(Goal, on_delete=models.CASCADE)
body = models.CharField(max_length=511, validators=[MinLengthValidator(5)])
hash_tags = models.ManyToManyField(HashTag)
class GoalCategory(models.Model):
category = models.CharField(max_length=25, primary_key=True, validators=[
MinLengthValidator(5)])
emoji_url = models.CharField(max_length=2083, validators=[
MinLengthValidator(8)])

@api_view(['GET'])
def get_most_recent_posts_by_category(request, category, count):
goal_uuid_list = list(Goal.objects.filter(category = category).values_list('uuid', flat=True))
Post.objects.filter(goal_id__in=goal_uuid_list).values('description', 'uuid')

我提出了这个解决方案,但它似乎不太理想,因为我还必须重命名密钥

def get_most_recent_posts_by_category(request, category, count):
goals_list = list(Goal.objects.filter(category = category).values_list('uuid', flat=True))
data = list(Post.objects.filter(goal_id__in=goals_list).order_by('created').values('body', 'goal_id__description', 'created'))
data['goal_description'] = data['goal_id__description']
data['post_body'] = data['body']
del data['goal_description']
del data['body']
return JsonResponse(data, status=status.HTTP_200_OK)

最新更新