You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化含多查询调用的事件权限过滤方法?

事件系统权限过滤查询优化咨询

我的应用中有一套事件系统,用户对对象执行删除/更新/创建操作时,会在数据库中生成包含对象信息和事件类型的新事件。Event模型定义如下:

class Event(models.Model):
    uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    model = models.CharField(max_length=200)
    object_id = models.IntegerField()
    event_type = enum.EnumField(ModelEventType)

其中model字段为对象所属模型名称,object_id为对应对象ID。

应用存在多级别访问权限:部分对象为用户私有,部分可在团队成员间共享。因此需要根据用户权限过滤事件,仅返回其有权限访问的对象对应的事件。当前实现逻辑为:先获取用户有权访问的所有对象ID,再据此查询关联事件。

获取用户可访问对象ID的方法如下:

class Event(models.Model):
   ....

   @staticmethod
   def get_events_ids(request):
      object_ids = {}

      Object1 = apps.get_model("myapp", "Object1")
      Object2 = apps.get_model("myapp", "Object2")
      Object3 = apps.get_model("myapp", "Object3")
      Object4 = apps.get_model("myapp", "Object4")
      Object5 = apps.get_model("myapp", "Object5")

      objects1 = Object1.objects.filter(...)
      objects2 = Object2.objects.filter(...)
      objects3 = Object3.objects.filter(...)
      objects4 = Object4.objects.filter(...)
      objects5 = Object5.objects.filter(...)
        
      objects = {
            "Object1": objects1,
            "Object2": objects2,
            "Object3": objects3,
            "Object4": objects4,
            "Object5": objects5,
        }

       for key in objects.keys():
            object_ids[key] = list(objects[key].values_list("id", flat=True))

       return object_ids

该逻辑覆盖多个模型,获取各模型对象ID后,按模型和ID过滤事件:

event_objects = Event.get_events_ids()
events = []
# 获取各模型对应的事件
for key in event_objects.keys():
   ids = event_objects[key]
   events_list = qs.filter(object_id__in=ids, model=key)
   events.extend(list(events_list))
ids = [obj.uuid for obj in events]

filtered_events = qs.filter(uuid__in=ids)

当前方案因查询数量过多导致效率低下、响应缓慢,请问是否可通过批量查询等方式优化该流程,提升响应速度?


内容的提问来源于stack exchange,提问作者Paul Miranda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 21:22:05