Фильтрация менеджера моделей на логическом уровне, вызывающая IntegrityError - PullRequest
0 голосов
/ 08 января 2011

Я использую 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)

В админке, когда я захожу в запись и проверяю проверенное Boolean на True и нажимаю save, я получаю IntegrityError:

duplicate key value violates unique constraint "localshare_location_pkey"

Это работало в другом проекте, когда по умолчанию было True, и я отфильтровал False.Я использую Postgres.Кто-нибудь знает, почему это не работает, или есть предложения по лучшему способу достижения этого?

1 Ответ

1 голос
/ 10 января 2011

Для всех, кто заинтересован, это ответ от IRC-канала django Админ ищет первого менеджера по умолчанию. Все, что мне нужно было сделать, - это изменить порядок, в котором они отображались в модели. Даже если переопределить набор запросов admin.py и указать на другого менеджера, порядок важен.

исправлено models.py

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