0

我有 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)

其中每个“提交”对象由普通 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 查询:在 user__userprofile 上调用 values()

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

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

感谢您的任何想法

-一世

4

1 回答 1

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'}]

干杯

-一世

于 2012-04-26T09:27:46.597 回答