私はDjango 1.11とPostgreSQL 9.6を使用しています 私のアプリではPersonというモデルがあり、データベースでは、マテリアライズド・ビューです。Django with Postgresql、列はGROUP BY句に現われなければならない、または集約関数で使用する必要があります
persons = Person.objects.values('personid', 'native')\
.annotate(total=Count('native'))
を実行すると1列のみまたは主キーとしてPERSONIDを設定していないか、それはないでしょう注釈を実行しない]を選択するとそれはpsycopg2.ProgrammingError: column "person.native" must appear in the GROUP BY clause or be used in an aggregate function
を言う
class Person(models.Model):
personid = models.CharField(max_length=18, primary_key=True)
count = models.BigIntegerField()
native = models.CharField(max_length=2)
...
エラーが発生します。
私は、クエリのSQLを印刷:
SELECT
"person"."native",
"person"."personid",
COUNT("person"."native") AS "total"
FROM "person"
GROUP BY "person"."native", "person"."personid"
私は何ができますか?
私はテーブルにビューを作成し、プライマリキーとしてpersonidを設定し、問題はありません。
あなたは 'psql'シェル(またはあなたが直接クエリを発行してみましょう他のインターフェイス)にこのクエリをしようとすると、任意のジャンゴやPythonなしで、どうなりますか? –
psqlシェルでは、動作します。だから私は理由を知らない。 – imcmy
Djangoはデータベースに出力する以外のSQLを送信することを排除できますか? –