Django技术问题:如何获取存在关联QlikAppUserAccess数据的QlikApp列表
解决方案
要获取所有存在关联QlikAppUserAccess记录的QlikApp实例,你可以用以下几种Django ORM的实现方式:
方法1:关联字段非空筛选+去重
通过模型定义的related_name(此处为qlik_app_user)筛选关联记录不为空的QlikApp,并用distinct()避免重复结果(一个App可能对应多条权限记录):
QlikApp.objects.filter(qlik_app_user__isnull=False).distinct()
方法2:标注关联记录数并筛选
使用annotate和Count统计每个App的关联权限记录数,再筛选记录数大于0的App,这种方法还能同时获取每个App的权限记录数量:
from django.db.models import Count QlikApp.objects.annotate(access_record_count=Count('qlik_app_user')).filter(access_record_count__gt=0)
方法3:子查询筛选App ID
从QlikAppUserAccess中取出所有关联的App ID,再用这些ID筛选QlikApp:
QlikApp.objects.filter(id__in=QlikAppUserAccess.objects.values_list('app_id', flat=True)).distinct()
注意事项
- 你的
QlikAppUserAccess模型中app字段设置了null=True,上述方法会自动排除那些app为null的权限记录对应的App(这类记录不会关联到有效QlikApp)。 - 若能确保每个App最多对应一条权限记录,可去掉
distinct(),但通常建议保留以避免重复结果。
内容的提问来源于stack exchange,提问作者Itamar
相关产品推荐
相关产品推荐

