django query set values()特定字段,以包括用户配置文件

django query set values()特定字段,以包括用户配置文件,django,django-models,Django,Django Models,我有两款django车型,如下所示: class UserProfile(models.Model): user = models.OneToOneField(User) organisation = models.CharField(max_length=200) class Submission(models.Model): user = models.ForeignKey(User) date_sub

我有两款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)
其中,每个“提交”对象都由普通django用户拥有,每个用户都有一个用户配置文件,该配置文件使用AUTH_PROFILE_模块以正常方式进行配置

正如您所期望的那样,我可以看到UserProfile对象的Organization字段:

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似乎是一个“特例”。这里讨论了这一点:

但是这个解决方案对我没有帮助(我相当肯定…)

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

谢谢你的建议


-事实证明,升级到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'}]
干杯


-我

我知道这实际上不会有帮助,但我得到了一个非常相同的星座,这确实有效。但是我很抱歉,我无法在你的atm代码中发现问题。我想你不能告诉我你使用的django版本吗?我使用的是1.2.3版OK非常感谢Jingo。。我升级到1.4版,现在可以正常工作了。