我在基于布尔字段的模型上使用管理器来过滤显示在网站上的对象,同时显示未经过滤的管理中的所有对象。我们的想法是用户提交位置,但我不希望它们在网站上显示,直到根据我的标准将其验证为有效位置。
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。有谁知道为什么这不起作用或有更好的方法来实现这个建议?
答案 0 :(得分:1)
对于任何有兴趣的人,这是django IRC频道提供的答案。管理员默认查找第一个Manager。我所要做的就是翻转他们在模型中出现的顺序。即使使用admin.py重写查询集并指向其他管理器,订单也很重要。
修复models.py
class Location(models.Model):
verified = models.BooleanField(default=False)
admin_objects = models.Manager()
objects = LocationManager()