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