python - Django:删除对象中的 m2m 关系

标签 python django django-models

我刚刚开始玩 Django,我喜欢它!不过,我仍在使用 Django ORM 进行工作...

目前我有一个与用户建立 m2m 关系的模型 Shift:

class Shift(models.Model):
    users = models.ManyToManyField(User) 

我想定义一个 View 来检查 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)

最佳答案

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

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

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

关于python - Django:删除对象中的 m2m 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29188424/

相关文章:

python - 如何不断更新 tkinter 标签直到按下按钮?

python - 如何在 Django 中加载具有基于内容的哈希文件名作为静态文件的 webpack 包?

python - 在 Django 中验证模型时出现未处理的异常

python - 重定向 django 时出错

python - Python 和 re2c 正则表达式中字符集的区别

django - nginx,uwsgi,DJango,DEBUG = False时的502, “upstream prematurely closed connection”

python - 如何建立一个模型与另外两个模型之间的关系

python - 在 django 迁移期间处理数据?

python - 将包含字符串的参数传递给 Django Raw sql 的正确方法

python - Docker 进程被神秘的 `Killed` 消息杀死