我有一个用户模型,它有一组通知:
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)")