• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

如何删除Django中ManyToMany字段的一个实例

python 来源:w.y 4次浏览

我想删除Django中ManyToMany字段的一个实例。 我试过,但它不工作:如何删除Django中ManyToMany字段的一个实例

act = Activity.objects.get(pk=pk) 
act.save() 
attendee, _ = Attendee.objects.get_or_create(student=request.user) 
**act.attendee.delete(attendee)** 
return... 

的想法是删除鉴于其主键的特定活动的与会者。

这是我的模型:

class Attendee(models.Model): 
student = models.ForeignKey(User, related_name="attendee") 

class Activity(models.Model): 
type = models.CharField(max_length=50, default="") 
title = models.CharField(max_length=200, default="") 
description = models.CharField(max_length=500) 
owner = models.ForeignKey(User, related_name="owner") 
college = models.CharField(max_length=200) 
location = models.CharField(max_length=200) 
room = models.CharField(max_length=200) 
startDate = models.DateTimeField(null=True, blank=True) 
endDate = models.DateTimeField(null=True, blank=True) 
attendee = models.ManyToManyField(Attendee, related_name="attendees",null=True, blank=True) 

===========解决方案如下:

要删除多对多的关系,使用remove()方法,而不是删除。

act.attendee.remove(attendee) 

此外,我建议修改的命名约定更好的可读性,

class Activity(models.Model): 
    attendees = models.ManyToManyField(Attendee, related_name="activities", null=True, blank=True) 

因此,移除逻辑将是

act.attendees.remove(attendee) 

您还可以删除使用反向关系,

attendee.activities.remove(act) 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)