Django の ORM を使用して複雑なクエリを実行しようとしていますが、適切な解決策が見つからないようです。つまり、ユーザーがビデオに基づいて質問に答える Web アプリケーションがあります。少なくとも 1 つの質問が未回答 (未回答) である、指定されたユーザーのすべてのビデオを表示する必要があります。私はまだ ORM を使ってそれを理解することができませんでした...私はおそらくこれのための SQL クエリを書き、生の SQL 関数でそれを実行できることを知っていますが、私は本当に ORM にとどまることを好みます.
モデル: ビデオ、質問、応答、およびデフォルトのユーザー。
関係:
- 質問はビデオに対して多対多の関係があります
- 応答には、質問、ビデオ、およびユーザーへのそれぞれの外部キーがあります
クエリで行う必要があること:
- 未回答のビデオ質問が 1 つ以上ある、指定されたユーザーのすべてのビデオを表示します。
どんな助けでも素晴らしいでしょう!私はこれに長い間苦労してきました。
編集:私が持っているモデルは(簡略化):
class Video(TimeStampedModel):
title = models.CharField(max_length=200)
source_id = models.CharField(max_length=20)
class Question(TimeStampedModel):
DEMOGRAPHIC_QUESTION = 'd'
QUESTION_TYPES = (
(VIDEO_QUESTION, 'Video related question'),
(DEMOGRAPHIC_QUESTION, 'Demographic question'),
)
MULTIPLE_CHOICE = 0
PLAIN_TEXT = 1
RESPONSE_TYPE = (
(MULTIPLE_CHOICE, 'Multiple Choice'),
(PLAIN_TEXT, 'Plain Text')
)
type = models.CharField(max_length=1, choices=QUESTION_TYPES)
videos = models.ManyToManyField(Video, null=True, blank=True)
title = models.CharField(max_length=500)
priority = models.IntegerField()
class Response(TimeStampedModel):
user = models.ForeignKey(User)
question = models.ForeignKey(Question)
video = models.ForeignKey(Video, blank=True, null=True)
choice = models.ForeignKey(Choice, null=True, blank=True,related_name='selected_choice')
text = models.CharField(max_length=500, blank=True)
// Not relevant but included for clarity
class Choice(TimeStampedModel):
question = models.ForeignKey(Question)
text_response = models.CharField(max_length=500)
image = models.FileField(upload_to=_get_choice_img_path, blank=True)
value = models.IntegerField(default=0)
external_id = models.IntegerField(default=0)