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)

各 'Submission' オブジェクトは通常の django ユーザーによって所有され、各ユーザーは通常の方法で AUTH_PROFILE_MODULE を使用して構成された UserProfile を持っています。

これは期待どおりに機能します。UserProfile オブジェクトの組織フィールドを確認できます。

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

Submissions リスト (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() メソッドの制限ですか? 誰かが 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 に答える