0

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

模型.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()

管理员.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

对于任何感兴趣的人,这是 django IRC 频道提供的答案。默认情况下,管理员会查找第一个 Manager。我所要做的就是翻转它们在模型中出现的顺序。即使 admin.py 覆盖查询集并指向另一个 Manager,顺序也很重要。

固定模型.py

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