3

I am trying to delete an instance of a ManyToMany field in Django. I tried this but it's not working:

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

The idea is to delete an Attendee of a specific Activity given its primary key.

These are my models:

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)
w.y
  • 99
  • 2
  • 11

1 Answers1

5

To delete ManyToMany relationships, use remove() instead of delete.

act.attendee.remove(attendee)

Also i suggest to change the naming conventions for better readability,

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

So removing logic will be,

act.attendees.remove(attendee)

You can also remove using the reverse relationship,

attendee.activities.remove(act)
Saji Xavier
  • 2,132
  • 16
  • 21