Django:删除对象中的 m2m 关系
Django: removing m2m relation in object
我刚开始玩 Django,我喜欢它!不过,我仍在使用 Django ORM 工作...
目前我有一个与用户建立 m2m 关系的模型 Shift:
class Shift(models.Model):
users = models.ManyToManyField(User)
我想定义一个视图来检查 M2M 关系是否存在,如果存在,它会删除此关系。这就是我被卡住的地方:如果存在关系,我可以查找,但我无法删除它。我的代码有什么问题?
def remove_if_exists(request, shift_id, username):
shift = get_object_or_404(Shift, pk=shift_id)
if shift.users.filter(username=username).exists()
shift.users.remove(username)
我自己的一些愚蠢的语法错误,应该是:
shift.users.remove(User.objects.get(username=username))
您的代码的问题在于该关系不是与用户名相关,而是与用户对象相关。所以你对 remove
的调用应该有一个 User 对象作为它的参数。您需要首先从数据库中实际获取相关用户,然后使用该对象调用 remove。
但是,有一个捷径:如果对象不在相关集中,remove 不会引发错误,因此您可以跳过 exists 调用。这给出了:
user = User.objects.get(username=username)
shift = get_object_or_404(Shift, pk=shift_id)
shift.users.remove(user)
我刚开始玩 Django,我喜欢它!不过,我仍在使用 Django ORM 工作...
目前我有一个与用户建立 m2m 关系的模型 Shift:
class Shift(models.Model):
users = models.ManyToManyField(User)
我想定义一个视图来检查 M2M 关系是否存在,如果存在,它会删除此关系。这就是我被卡住的地方:如果存在关系,我可以查找,但我无法删除它。我的代码有什么问题?
def remove_if_exists(request, shift_id, username):
shift = get_object_or_404(Shift, pk=shift_id)
if shift.users.filter(username=username).exists()
shift.users.remove(username)
我自己的一些愚蠢的语法错误,应该是:
shift.users.remove(User.objects.get(username=username))
您的代码的问题在于该关系不是与用户名相关,而是与用户对象相关。所以你对 remove
的调用应该有一个 User 对象作为它的参数。您需要首先从数据库中实际获取相关用户,然后使用该对象调用 remove。
但是,有一个捷径:如果对象不在相关集中,remove 不会引发错误,因此您可以跳过 exists 调用。这给出了:
user = User.objects.get(username=username)
shift = get_object_or_404(Shift, pk=shift_id)
shift.users.remove(user)