根据example,我有三种模式:
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()
添加成员有效。但是如何删除单个Membership实例 (用户退出组),既不删除用户,也不删除组?
当我尝试删除它时:
u = User(request.user)
g = Group.objects.get(id=group_id, membership__user=u)
m = Membership(user=request.user, group=g)
m.delete()
我收到错误:
/ groups / quit / 1 /
中的AssertionError无法删除成员资格对象,因为其id属性设置为 无。
答案 0 :(得分:17)
在第
行m = Membership(user=request.user, group=g)
您创建了一个未从数据库中获取的新Membership
。这就是为什么它的id属性设置为None。
也许你的意思是
m = Membership.objects.get(user=request.user, group=g)
答案 1 :(得分:4)
此特定错误由以下事实触发:m
类Membership
实例未保存,因此其主键为None。显然,删除这样一个未保存的实例是不可能的(这是有道理的,因为没有什么可以“删除”)。