2011-01-08 12 views
0

ブールフィールドに基づくモデルでマネージャを使用して、管理者のすべてのオブジェクトをフィルタなしで表示しながら、サイトに表示されているオブジェクトをフィルタリングしています。アイデアはユーザーが場所を送信していますが、条件に基づいて有効な場所として確認されるまでサイトに表示したくないということです。IntegrityErrorを引き起こすBooleanでのモデルマネージャのフィルタリング

models.py

class LocationManager(models.GeoManager): 
    def get_query_set(self): 
     return super(LocationManager, self).get_query_set().filter(verified=True) 

class Location(models.Model): 
    verified = models.BooleanField(default=False) 
    objects = LocationManager() 
    admin_objects = models.Manager() 

admin.py管理者に

class LocationAdmin(admin.OSMGeoAdmin): 
    def queryset(self, request): 
     qs = self.model.admin_objects.get_query_set() 
     return qs 

admin.site.register(Location, LocationAdmin) 

、私はレコードに行くとTrueに検証ブールをチェックし、キーを押し、保存、I IntegrityErrorを取得する:

duplicate key value violates unique constraint "localshare_location_pkey" 

これは、デフォルトがTrueで、Falseにフィルタリングされたときに別のプロジェクトで動作しました。私はPostgresを使用しています。誰もがなぜこれが動作していないか、これを達成するためのより良い方法のための提案を持っているか分かっていますか?

+0

あなたは 'フィルタ()'句を削除した場合、それは動作しますか?あなたのデータベース構造について何か変更し、dbを正しく同期させませんでしたか? –

+0

@lazerscience、はい、それはフィルタなしで動作します。私はDBの移行のために南を使用しており、dbは最新です。 – knuckfubuck

+0

例外がスローされたところでトレースバックを投稿できますか? –

答えて

1

興味のある方は、これはdjango IRCチャンネルの回答です。管理者は、デフォルトで最初のManagerを探します。私がしなければならなかったのは、彼らがモデルに現れた順序を反転させることでした。管理用のクエリーセットをオーバーライドして、他のマネージャを指していても、その順序は重要です。

固定models.py

class Location(models.Model): 
    verified = models.BooleanField(default=False) 
    admin_objects = models.Manager() 
    objects = LocationManager() 
+0

いくつかのハードコアのものはすぐそこに、バディ!まだ1.7で働いて、歓声! – mccc

関連する問題