如何在Django多对多关系中删除中间模型的实例?

mie*_*nik 4 django many-to-many instance django-models

根据一个例子,我有三个模型:

class User(models.Model):
    name = models.CharField(max_length=128)

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(User, through='Membership')

class Membership(models.Model):
    person = models.ForeignKey(User)
    group = models.ForeignKey(Group)
    date_joined = models.DateField()
Run Code Online (Sandbox Code Playgroud)

添加成员有效.但是,如何删除单个成员资格实例(用户退出组),而不删除用户和组?

当我尝试删除它时:

    u = User(request.user)
    g = Group.objects.get(id=group_id, membership__user=u)
    m = Membership(user=request.user, group=g)
    m.delete()
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

/ groups/quit/1 /的AssertionError

无法删除成员资格对象,因为其id属性设置为None.

Nic*_*ood 17

在线

m = Membership(user=request.user, group=g)
Run Code Online (Sandbox Code Playgroud)

您创建了一个新的,Membership您没有从数据库中获取一个.这就是为什么它的id属性设置为None.

也许你的意思

m = Membership.objects.get(user=request.user, group=g)
Run Code Online (Sandbox Code Playgroud)