我有一个数据库,当前有100条记录被分类为“草稿”和“公共”。我的干草堆索引相关功能是:
def read_queryset(self, using=None):
return self.get_model().objects.filter(storage__status='public')
def index_queryset(self, using=None):
return self.read_queryset()
仅索引“公共”记录。
因此,我的第一个要求是仅在通过模型管理员执行“公开”操作(因为'public'和'draft'是在相关模型存储中指定的,因此 RealtimeSignalProcessor 不会执行此操作):
def make_public_action(self, request, queryset):
update_index.Command().handle()
并类似地,使用
从索引中删除def make_draft_action(self, request, queryset):
update_index.Command().handle(remove=True)
但是,这种对 update_index.Command()。handle()的调用似乎并不可行...
真正的问题是当我想对“公共”模型进行更改时,再次使用 update_index.Command()。handle()在模型save()方法中似乎很合理, (如果该记录的状态为“公开”)。但这会导致所有 public 记录的整个索引都被更新,而只有已更改的记录应被更新。我认为当数据库获取数千条“公共”记录并且每次对模型进行更改(字段值或未发布)时,索引都会全部更新时,这将变得一团糟。
有什么办法可以解决这个问题,我认为这应该是干草堆的主要功能?
谢谢