On Mon, 2009-01-19 at 22:38 -0800, I.A wrote:
> Hi guys,
> I apologize for the confusing title.
> 
> I'm still confused on using the models in a m2m relationship. Suppose
> I have the models below from the tutorials on the django site:
> 
> class Author(models.Model):
>     name = models.CharField(max_length=50)
>     email = models.EmailField()
> 
>     def __unicode__(self):
>         return self.name
> 
> class Entry(models.Model):
>     blog = models.ForeignKey(Blog)
>     headline = models.CharField(max_length=255)
>     body_text = models.TextField()
>     pub_date = models.DateTimeField()
>     authors = models.ManyToManyField(Author)
> 
> If I have the Author that I want I can get all the entries related to
> this Author by doing
> 
> query_set = author.entry_set.all()
> 
> If I do query_set.delete() at this point, I know it will delete all
> the Entry data that relates to the particular Author, which will also
> delete all relationships the other Authors had with the Entries in the
> query_set.
> 
> How do I then delete just the relationship of that particular Author
> to those Entries without effecting other Author's relationship (i.e
> deleting the data in the intermediary table only). If the are no other
> Authors relating to these Entries, it would be ok then to delete those
> Entries too.

There's a clear() method that works on reverse relations. It's only
documented ([1]) as being for ForeignKey fields, but I just tested it
(after finding it by browsing the source) and it appears to work on
ManyToManyFields as well. Thus,

        author.entry_set.clear()
        
does what you're after. It won't remove any Entry objects that
subsequently end up with zero attached authors, as noted in the
documentation. You'll have to do an extra query for that:

        Entry.objects.filter(authors=None).delete()

[1] http://docs.djangoproject.com/en/dev/ref/models/relations/

Regards,
Malcolm



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to