django query设置values()包含用户配置文件的特定字段

时间:2012-04-25 16:25:29

标签: django django-models

我有2个这样的django模型:

class UserProfile(models.Model):
    user             = models.OneToOneField(User)
    organisation     = models.CharField(max_length=200)

class Submission(models.Model):
    user             = models.ForeignKey(User)
    date_submission  = models.DateTimeField(db_index=True, default=datetime.now())
    date_published   = models.DateTimeField(db_index=True, null=True)
    status           = models.CharField(db_index=True, max_length=4000)
    logfile          = models.TextField(db_index=False)

其中每个'Submission'对象由普通django用户拥有,并且每个用户都以正常方式使用AUTH_PROFILE_MODULE配置UserProfile。

这可以正常工作,我可以看到UserProfile对象的组织字段:

Submission.objects.all()[0].user.userprofile.organisation

当我想序列化提交列表(导出到json)时,通常我会使用:

Submission.objects.all().values()
# or for more control of fields
Submission.objects.all().values('status', 'date_submission')
# to traverse a relationship.. get info from the User object
Submission.objects.all().values('user__username')

..这些工作正常。但我的问题是我不能:

Submission.objects.all().values('user__userprofile__organisation')

raise FieldError("Invalid field name: '%s'" % name)
django.core.exceptions.FieldError: Invalid field name: 'user__userprofile__organisation'

所以似乎UserProfile是一个'特殊情况'。这在这里讨论: Django query : Call values() on user__userprofile

但解决方案对我没有帮助(我很确定..)

这是values()方法的限制吗?有没有人知道一种方法来获得相同的值()输出但能够遍历UserProfile模型?

感谢任何想法

-i

1 个答案:

答案 0 :(得分:2)

原来升级到Django的1.4版解决了这个问题,Jingo的评论建议1.3.1也可以。

所以现在我可以:

query_set = Submission.objects.filter()
query_set.values('user__userprofile__organisation')
[{'user__userprofile__organisation': u'organisation test 1'}]

欢呼声

-i