私はこのような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 モデルをトラバースできますか?
アイデアをありがとう
-私