过滤模型时简化标志



我有一个用户模型,它有一组通知:

class User(AbstractUser):
# Notification flags
send_to_all = models.BooleanField(default=True)
send_to_me = models.BooleanField(default=True)
send_to_friends = models.BooleanField(default=True)
# ...

我将它们从前端传递到我的视图,在那里我触发send_notifications函数。

# ...
def update(self, request, *args, **kwargs):
# ...
send_notifications(request.data.get('send_to_all', False))
# ...

send_notifications我想查询User.objects.filter(),并且只包含那些从前端传递的标志设置为True的。

我的问题是:

有什么方法可以简化它吗?我问这个问题是因为有很多通知选项,比如20个。目前我的代码有20个if:

def send_notifications(flag):
if flag == 'send_to_all':
users_to_send = User.objects.filter(send_to_all=True) 
if flag == 'send_to_me':
users_to_send = User.objects.filter(send_to_me=True) 
if flag == 'send_to_friends':
users_to_send = User.objects.filter(send_to_friends=True) 
if flag == 'another_send_flag':
users_to_send = User.objects.filter(another_send_flag=True) 
if flag == 'another_send_flag':
users_to_send = User.objects.filter(another_send_flag=True)

谢谢!

可以用eval包装User.objects.filter()像这样:

users_to_send = eval(f"User.objects.filter({flag}=True)") 

相关内容

  • 没有找到相关文章

最新更新