这是一种M2M关系,其中间模型为“会员”(中间模型使用“通过”关键字存储有关学生与课程之间关系的额外信息)。在我的情况下,额外的关系是学生在每门课程中的成绩。我的问题是:我无法在django中找到一种方法来删除/删除其中一门课程与学生的成绩之间的关系。
class Student(models.Model):
name = models.CharField(max_length=128)
def __str__(self):
return self.name
class Course(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Student, through='Membership')
def __str__(self):
return self.name
class Membership(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
group = models.ForeignKey(Course, on_delete=models.CASCADE)
grade = models.CharField(max_length=64)
由于'Membership'是一个中间模型,它会禁用remove(),这在普通的ManyToMany关系中是可以访问的。
您可以使用clear()方法,但他会删除学生在课程关系中的每个年级。例如:如果'Carlos'在5门不同的课程中,每门课程有5个不同的成绩,还有一些其他学生'Maria'
c =课程
c.members.clear()
会清除每个年级的关系。您可以在文档中看到另一个示例: https://docs.djangoproject.com/en/2.0/topics/db/models/#extra-fields-on-many-to-many-relationships
如果我尝试使用remove()方法,我会收到一个属性错误:
m1 ='会员资格的实例'
m1.remove()
AttributeError: 'Membership' object has no attribute 'remove'
在django管理员中,我能够删除一个“会员对象”==='等级关系',但我无法找到一种方法将其删除在shell或我的代码上不使用clear()方法(它不适合我,因为它清除了每个关系)
请帮助:///
答案 0 :(得分:0)
您应该删除会员资格。
m1.delete()