我有模型:
(我的意思是一个视频有一些参数,比如键值对(例如{"rabbit": 1, "panda": 1, "lion": 0}))
然后我试图通过查询参数获取视频。
(像这样
我想要执行的SQL代码如下:
如何在Django的查询集中实现这个过程?
class VideoParameter(models.Model):
member = models.ForeignKey(Tag, on_delete=models.DO_NOTHING, related_name="parameter_tag")
value = models.PositiveIntegerField()
class Video(TimeStampedModel):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
parameters = models.ManyToManyField(VideoParameter, related_name="video_parameter")
url = models.URLField(verbose_name=_('Url'))
(我的意思是一个视频有一些参数,比如键值对(例如{"rabbit": 1, "panda": 1, "lion": 0}))
然后我试图通过查询参数获取视频。
(像这样
/video/?rabbit=1&panda=1&lion=0
)我想要执行的SQL代码如下:
SELECT app_video.id, count(*) AS match_count FROM app_video
INNER JOIN app_video_parameters on app_video.id = app_video_parameters.video_id
INNER JOIN app_videoparameter ON app_video_parameters.videoparameter_id = app_videoparameter.id
WHERE (app_videoparameter.member_id = 1 AND app_videoparameter.value = 0)
OR (app_videoparameter.member_id = 9 AND app_videoparameter.value = 1)
OR (app_videoparameter.member_id = 11 AND app_videoparameter.value = 1)
...
GROUP BY (app_video.id)
ORDER BY match_count DESC;
如何在Django的查询集中实现这个过程?