2009-12-14 4 views
1

J'ai une relation ManyToMany avec un de mes modèles. Lors de la suppression d'un enfant, je souhaite supprimer la relation mais laisser l'enregistrement tel qu'il pourrait être utilisé par d'autres objets. En appelant la vue suppression, je reçois une erreur AttributeError:Comment faire pour supprimer correctement une relation ManyToMany spécifique?

Exception Value: 'QuerySet' object has no attribute 'clear'

Ceci est mon models.py:

class Feed(models.Model): 
    username = models.CharField(max_length=255, unique=True) 

class Digest(models.Model): 
    name = models.CharField(max_length=255) 
    user = models.ForeignKey(User) 
    items = models.PositiveIntegerField() 
    keywords = models.CharField(max_length=255, null=True, blank=True) 
    digest_id = models.CharField(max_length=20, unique=True) 
    time_added = models.DateTimeField(auto_now_add=True) 
    active = models.BooleanField(default=1) 
    feeds = models.ManyToManyField(Feed) 

Et la section pertinente de views.py:

def feed_delete(request, id): 
    digest = get_object_or_404(Digest, id=id) 
    if digest.user == request.user: 
     Feed.objects.get(id=request.POST.get('id')).digest_set.filter(id=id).clear() 

    return HttpResponseRedirect(digest.get_absolute_url()) 

Répondre

6

Effacer les champs d'un résumé d'instance

digest = get_object_or_404(Digest, id=id) 
if digest.user == request.user: 
    digest.feeds.clear() 
    #do your processing 

En réponse à votre commentaire.

digest = get_object_or_404(Digest, id=id) 
if digest.user == request.user: 
    feed=digest.feeds.get(id=2)#get an instance of the feed to remove 
    digest.feeds.remove(feed)#remove the instance 

Espérons que cela aide!

+0

Je veux supprimer un flux spécifique, mais pas tous –

+0

Super! Je n'avais pas essayé de supprimer() –

+0

Essayez le code digest.feeds.remove (flux) dans ./manage.py shell. Il ne devrait supprimer qu'un seul flux. – istruble

Questions connexes