【问题标题】:Django: serialize queryset with some custom columns and format some fieldsDjango:使用一些自定义列序列化查询集并格式化一些字段
【发布时间】:2018-08-17 06:04:50
【问题描述】:

我的 Django > 2 项目中有以下模型:

class Post(models.Model):
  text = models.TextField()
  date = models.DatetimeField(default=datetime.now, blank=True)

class Like(models.Model):
  post = models.ForeignKey(Post)
  user = models.ForeignKey(User, related_name="current_user_likes")

我想发送一个帖子列表的 JSON 响应。并且还显示登录用户的每个帖子,无论是否已经喜欢。

我希望帖子列表包含 request.user 的布尔字段“current_user_like”。

我正在使用以下方式创建帖子的查询集,无论特定用户是否喜欢。和https://stackoverflow.com/a/33944811/2897115一样的方式

posts = Post.objects.all().prefetch_related(
    Prefetch('current_user_likes', queryset=Like.objects.filter(user=request.user))
)

我期待 JSON 如下:

[ {"id":1, "text":"sample", "date":"whateverformat i want i.e YY-MM-DD","current_user_likes":"true/false"} ........]

所以想要带有格式化日期的 Json 并添加“current_user_likes”字段。

怎么做

【问题讨论】:

  • 你可以发布你的serlizer类
  • 目前我不想使用 Django rest 框架。我想知道如何使用 Django

标签: django


【解决方案1】:

对于日期格式,您可以直接使用.annotate() 并使用一些数据库函数来转换为您的格式。

我建议使用Exists 并输入annotate()

对不起,我无法检查语法,但这应该几乎可以工作

qs = Post.objects.all()
sub = Like.objects.filter(post__id=OuterRef('pk'), user=request.user)

values = qs.annotate(
    date=Func(F('date'), function='db_specific_date_formatting_func'),
    current_user_like=Exists(sub)
).values('text, 'date', 'current_user_like')

【讨论】:

    猜你喜欢
    • 2018-07-12
    • 2021-12-28
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2020-03-03
    • 2011-04-15
    相关资源
    最近更新 更多