Django:删除对象中的m2m关系

时间:2015-03-21 21:45:41

标签: python django django-models

我刚刚开始玩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)

2 个答案:

答案 0 :(得分:3)

代码的问题在于关系不是用户名,而是用户对象。因此,您对remove的调用应该有一个User对象作为其参数。您需要先从db中获取相关用户,然后使用该对象调用remove。

但是,有一个快捷方式:如果对象不在相关集中,则remove不会引发错误,因此您可以跳过exists调用。这只是:

user = User.objects.get(username=username)
shift = get_object_or_404(Shift, pk=shift_id)
shift.users.remove(user)

答案 1 :(得分:0)

我自己的一些愚蠢的语法错误应该是:

 shift.users.remove(User.objects.get(username=username))