模型管理器过滤布尔值导致IntegrityError

时间:2011-01-08 10:18:00

标签: django postgresql django-models django-admin geodjango

我在基于布尔字段的模型上使用管理器来过滤显示在网站上的对象,同时显示未经过滤的管理中的所有对象。我们的想法是用户提交位置,但我不希望它们在网站上显示,直到根据我的标准将其验证为有效位置。

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。有谁知道为什么这不起作用或有更好的方法来实现这个建议?

1 个答案:

答案 0 :(得分:1)

对于任何有兴趣的人,这是django IRC频道提供的答案。管理员默认查找第一个Manager。我所要做的就是翻转他们在模型中出现的顺序。即使使用admin.py重写查询集并指向其他管理器,订单也很重要。

修复models.py

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