我有一个 client
和一个 user
模型。 client
和 user
都有一个名为 help_desk
的标志。帮助台客户端和用户将保持同步。这意味着:
help_desk
时,他们将被添加到所有帮助台客户端help_desk
时,他们将从所有帮助台客户端中删除help_desk
时,所有帮助台用户都添加到其中help_desk
时,所有帮助台用户都将从它中删除我一直试图通过使用以下内容覆盖 save()
方法来解决此问题:
def save(self, *args, **kwargs):
help_desk_users = get_user_model().objects.filter(is_help_desk=True)
if self.help_desk:
for user in help_desk_users:
self.users.add(user)
else:
for user in self.users.all():
if user in help_desk_users:
self.users.remove(user)
super().save(*args, **kwargs)
def save(self, *args, **kwargs):
if self.is_help_desk:
for client in Client.objects.filter(help_desk=True):
client.users.add(self)
else:
for client in Client.objects.filter(help_desk=True):
client.users.remove(self)
super().save(*args, **kwargs)
用户代码按预期工作,但客户端代码没有。我认为原因是您无法在覆盖的保存方法中进行批量更新 - 请参阅 docs。我的问题是,这仅仅是 Django 的限制吗?如果是这样,解决此类问题的最佳实践替代解决方案是什么?
答案 0 :(得分:0)
对于寻找解决方案的其他人来说,上面的代码实际上在通过管理面板保存时不起作用。如果您希望在从管理面板保存时使用该功能,则必须覆盖 save_related
函数。这里有一个 article 更详细地解释了这个问题。