0
我試圖用Django的ORM執行一個複雜的查詢,我似乎無法找到一個很好的解決方案。也就是說,我有一個Web應用程序,用戶可以根據視頻回答問題。我需要爲指定用戶顯示至少有一個未回答(未回覆)問題的所有視頻。我還沒能用ORM弄清楚它......我知道我可能會爲此編寫一個SQL查詢並且只用原始SQL函數執行它,但我真的更願意留在ORM中。Django ORM的複雜查詢
型號:視頻,問題,響應和默認用戶。
關係:
- 問題有很多人對視頻許多關係
- 響應具有外鍵每到一個問題,視頻和用戶
什麼查詢需要做的:
- 顯示指定用戶的所有視頻,其中至少有一個視頻問題未答覆(沒有迴應)。
任何幫助都會很棒!我一直在努力,這太久了。
編輯:我是(簡化)的模型:
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)
分享你擁有的模特。這會更容易幫助 – karthikr
問題 - 視頻是多對多的?爲什麼?似乎每個問題都只有一個視頻,即使每個視頻都有很多問題。 – mklauber
是的問題 - 視頻是多對多的,因爲我們希望能夠將相同的問題應用於多個視頻。例如 - 這部影片最受歡迎的部分是什麼?這個問題適用於許多視頻。 – user2479537