0

ブール フィールドに基づくモデルで Manager を使用して、サイトに表示されるオブジェクトをフィルタリングし、管理者のすべてのオブジェクトをフィルタリングせずに表示しています。アイデアは、ユーザーが場所を送信しているということですが、私の基準に基づいて有効な場所として確認されるまで、それらをサイトに表示したくありません。

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 にチェックして [保存] を押すと、IntegrityError が発生します。

duplicate key value violates unique constraint "localshare_location_pkey"

デフォルトがTrueで、Falseでフィルタリングした場合、これは別のプロジェクトで機能しました。Postgresを使用しています。なぜこれが機能しないのか、またはこれを達成するためのより良い方法について提案がある人はいますか?

4

1 に答える 1

1

興味のある人のために、これはdjangoIRCチャネルによって提供される答えです。管理者はデフォルトで最初のマネージャーを探します。私がしなければならなかったのは、モデルに表示された順序を逆にすることだけでした。admin.pyがクエリセットをオーバーライドし、他のマネージャーを指している場合でも、順序は重要です。

修正されたmodels.py

class Location(models.Model):
    verified = models.BooleanField(default=False)
    admin_objects = models.Manager()
    objects = LocationManager()
于 2011-01-09T21:48:11.807 に答える