【问题标题】:Django - serialize to JSON, how to serialize a FK User objectDjango - 序列化为 JSON,如何序列化 FK 用户对象
【发布时间】:2012-01-18 16:49:40
【问题描述】:

我正在向服务器端发送请求以获取当前主题的 cmets 列表的页面。

喜欢这个

localhost:8000/getComments/567 ,而 567 是主题 ID。

然后,在我的 django 视图中,像这样:

def getProjectComments(request, pId):
    format = 'json'
    mimetype = 'application/javascript'  #'application/xml' for 'xml' format
    comments = PrjComment.objects.filter(prj=pId)
    data = serializers.serialize(format, comments)
    return HttpResponse(data,mimetype)

现在,问题是, 当我尝试在浏览器端使用 jQuery.parseJSON(data) 时。

[
 {
   "pk": 10, 
    "model": "app.prjcomment", 
    "fields": 
     {
      "status": 1, 
      "time_Commented": "2011-12-11 17:23:56", 
      "prj": 1, 
      "content": "my comment 1", 
      "user": 25
     }
  }, 
  {
   "pk": 9, 
   "model": "app.prjcomment", 
   "fields": {
     "status": 1, 
     "time_Commented": "2011-12-11 17:23:51", 
     "prj": 1, 
     "content": "comment \u4e00\u4e2a", 
     "user": 33
   }
 } ..

我需要使用用户对象的一些详细信息。 (用户是模型 PrjComment 中的外键) 例如 user.first_name 显示在评论列表中。

但这里它只是用户的 id。("user": 33) 我怎样才能做到这一点?有谁可以帮忙吗? 非常感谢

用户是 Django auth_user。

【问题讨论】:

  • 最后,我使用原始 sql 来实现这个功能。

标签: django json serialization foreign-keys


【解决方案1】:

简单的解决方案是指定您需要的值:

comments = PrjComment.objects.filter(prj=pId) \
                     .values('status','time_commented','prj','content','user__id',
                             'user__username','user__first_name')

更新:

要访问您的用户配置文件信息,请使用您的 AUTH_PROFILE_MODULE 设置中定义的表名。在我的情况下,该表称为 userprofile,我会像这样访问数据:

values('user__userprofile__moreinfo')

moreinfo 是您感兴趣的领域

【讨论】:

  • 非常感谢,它对我有用,但这里有另一个问题。我无法访问 filter().values() 中的“user.get_profile”。 user__first_name 可以获取 first_name ,但我无法获取 userprofile 表中的用户属性。我尝试了 user__get_profile,这对我不起作用。有什么建议?谢谢。
  • 用户配置文件在 settings.xml 中仍然不适合我 AUTH_PROFILE_MODULE = 'hedan.UserProfile'====>FieldError at /projects/morecmets/1/11 无法将关键字 'user__UserProfile__telephone' 解析为字段。选项有:cId、内容、prj、回复、状态
猜你喜欢
  • 2016-02-27
  • 2020-07-19
  • 2018-09-12
  • 2021-11-24
  • 2018-09-08
  • 1970-01-01
  • 2017-10-29
  • 2011-03-01
相关资源
最近更新 更多