2013-02-11 49 views
4

我是noob django用戶,並且在Model.objects.all方法中遇到了一些麻煩。 我有一個用戶模型: (我知道保持在密碼明文是不好的做法,但是這僅僅是應該是一個玩具的例子)Django爲Postgres生成無效SQL

class UsersModel(models.Model): 
    password = models.CharField(max_length=MAX_PASSWORD_LENGTH) 
    user = models.CharField(max_length=MAX_USERNAME_LENGTH, primary_key=True) 
    count = models.IntegerField() 

而且我已經得到了是應該的測試方法刪除所有條目在user表:

def function(self): 
    UsersModel.objects.all().delete() 

出於某種原因,調用UsersModel.objects.all()引發錯誤

DatabaseError: column "cs169proj1_usersmodel.user" must appear in the GROUP BY clause or 
be used in an aggregate function 
LINE 1: SELECT "cs169proj1_usersmodel"."user", "cs169proj1_usersmode... 

從圍棋ogling,我發現SQL中的這個特定錯誤只出現在Postgresql(我正在使用)上。任何人都知道如何解決/解決這個問題?

+0

您對此型號有定製經理嗎? – 2013-02-11 06:28:18

+0

我不認爲這是錯誤的原因,但在使用除id之外的其他東西作爲primary_key時應該小心。它可能會導致管理網站的麻煩:請參閱http://stackoverflow.com/q/2011629/117092 – luc 2013-02-11 06:41:18

+1

修復它!我刪除並重新創建了數據庫,然後運行manage.py syncdb。不知道它是什麼,但現在已經消失了。 – sfendell 2013-02-11 07:31:56

回答

4

聽起來就像是列名count被誤解爲aggregate function

最佳解決方案:切勿使用reserved words作爲標識符。

+0

刪除計數列後,此操作仍然存在。我選擇count作爲名字,因爲這是爲了一個類的項目,我只是遵循規範。 – sfendell 2013-02-11 07:31:11

+0

錯誤引用用戶字段,不計數。 – 2013-02-11 09:07:08

+0

@ Yuji'Tomita'Tomita:當然,如果這被誤認爲是一個聚合函數,它不會引用「count」字段。 – 2013-02-12 10:28:19

2

在使用postgresql進行生產時,從django 1.6升級到1.9.8時遇到了simillar問題。

在我的情況下,這個問題是由於Django 1.9中的變化,至少需要postgresql 9.1,如here所述。

對於redhat/centos here很好的postgresql更新指令。