【发布时间】:2013-06-27 15:38:26
【问题描述】:
我的 views.py 中有一条原始 SQL 语句
Message.objects.raw('''
SELECT s1.ID, s1.CHARACTER_ID, MAX(s1.MESSAGE) MESSAGE, MAX(s1.c) occurrences
FROM
(SELECT ID, CHARACTER_ID, MESSAGE, COUNT(*) c
FROM tbl_message WHERE ts > DATE_SUB(NOW(), INTERVAL %s DAY) GROUP BY CHARACTER_ID,MESSAGE) s1
LEFT JOIN
(SELECT ID, CHARACTER_ID, MESSAGE, COUNT(*) c
FROM tbl_message WHERE ts > DATE_SUB(NOW(), INTERVAL %s DAY) GROUP BY CHARACTER_ID,MESSAGE) s2
ON s1.CHARACTER_ID=s2.CHARACTER_ID
AND s1.c < s2.c
WHERE s2.c IS NULL
GROUP BY CHARACTER_ID
ORDER BY occurrences DESC''', [days, days])
这条SQL语句的结果(直接在数据库上测试)是:
ID | CHARACTER_ID | MESSAGE | OCCURENCES
----+--------------+---------+--------------
148 | 10 | test | 133
但我得到的只是InvalidQuery 异常信息Raw query must include the primary key
然后我仔细检查了docs 并阅读:
只有一个字段不能省略 - 主键 field....如果您忘记包含主键,则会引发 InvalidQuery 异常。
如您所见,我在语句中添加了请求的主键。怎么了?
class Message(models.Model):
character = models.ForeignKey('Character')
message = models.TextField()
location = models.ForeignKey('Location')
ts = models.DateTimeField()
class Meta:
pass
def __unicode__(self):
return u'%s: %s...' % (self.character, self.message[0:20])
【问题讨论】:
-
你还有这个问题吗?
-
我用一个视图做了一个解决方法......但如果你有解决方案,请随时发布。
-
你能发布你的
Message模型吗? -
解决方法是什么?我正处于你的确切情况。区分大小写并不能解决我的问题。
标签: django django-models