Skip to main content
 首页 » 编程设计

python之如何正确删除特定的 ManyToMany 关系

2025年05月04日18me-sa

我与我的一个模型建立了多对多关系。在删除一个 child 时,我想删除关系但保留记录,因为它可能被其他对象使用。在调用删除 View 时,出现 AttributeError 错误:

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

这是我的模型.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) 

以及 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()) 

请您参考如下方法:

清除摘要实例上的字段

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

回应您的评论。

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  

希望这对您有所帮助!