我有一个标记模型,有ManyToMany字段“parents”给标记模型,给它自己。还有“allowed_users”字段。
我需要以这样一种方式保护视图,用户不会看到父母字段中的任何标记,他是不允许的。
我试图修改queryset,从父对象中删除相应的标签,但是当我修改示例tag_instance.parents.set(my_new_list)
时,它会自动保存,所以我修改了数据库,修改了示例的真实的值。
因此,一般的问题是“如何以这样一种方式保护我的视图,即该对象的ManyToMany字段被自定义逻辑过滤”。
另一个问题是“如何在不改变数据库的情况下设置manytomany字段”,因为这将是前一个问题的解决方案。
是,我使用DRF
1条答案
按热度按时间2w2cym1i1#
在执行SQL查询时,可以使用Prefetch对象过滤相关表。
例如:
这将预取"父项"(意味着在访问
my_tag.parent.all()
时不会运行其他sql查询),并过滤父项以仅保留allowed_user中当前用户的父项注意:
Tag.objects.filter(allowed_users=current_user)
将为allowed_user中的每个用户复制标记条目,因此.distinct()
将保留每个条目中的一个