2017-01-05 8 views
1

私は古いデータベースを持っており、カスタム選択が必要です。私が使用することができ、SQLでDjangoアノテーションのPostgres select関数

SELECT x(geometry) FROM table 

が、私は選択のDjangoでのx()関数を強制する方法を知りません。

答えて

1

Expressionsを使用してカスタム関数を作成できます。

class GeoX(Func): 
    function = 'X' 

MyModel.objects.annotate(x=GeoX('field')) 

これにより、ジオメトリX関数が呼び出され、モデルのxというラベルのフィールドに注釈が付けられます。しかし、これは劣った解決策です。より良い解決策はgeodjangoをインストールすることです。これにより、PostGISのほぼすべての単一機能に完全にアクセスできます。 spatialiteとmsyql空間拡張でも機能します。

+0

私のPostgresのバージョンがgeodjangoの古いにある運悪く、ありがとうございます。 – Crystal

+0

それは運が悪いです。アップグレードしないのはおそらく古いバージョンのPostgisを使用している可能性があります。これは現代版の豊富な機能を備えていません。 – e4c5

+0

巨大な会社、多くのデータと誰もがアップグレードを恐れるxD – Crystal

1

私はFUNCキー(使用して問題を解決するために管理)

Func(F('geometry'), function='x')