2016-03-04 72 views
1

我在标签和餐馆之间有多对多的关系。我想要做的是删除两个给定的标签列表之间的关联。删除Django中的多对多的某些关联

例如,假设restaurant.tags.all()产生这些标签: 'T1', 'T2', 'T3', 'T4', 'T5']

有没有一种方法,我可以做restaurants.tags.remove (['t2','t4']),以便restaurant.tags.all()的结果现在是:['t1','t3','t5']?

回答

2

是的,你可以使用删除。退房https://docs.djangoproject.com/es/1.9/ref/models/relations/#django.db.models.fields.related.RelatedManager.remove

就你而言,你需要一个对标签的引用而不是他们的字符串表示。

tags_to_be_removed = Tags.objects.filter(pk__gte=5) # use your filter 
restaurant.tags.remove(*tags_to_be_removed) 

我们要将列表转换成args作为removeConverting list to *args in Python

+0

好了,但如果我想删除查询集或列表?就像您在执行Tags.objects.filter(...)时返回的内容一样。这是我的实际使用案例。有没有办法做restaurant.tags.remove(list/queryset)? –

+0

那么你总是可以为queryset:restaurant.tags.remove(t)'做t,然后保存餐厅。我必须看看如果传递查询集以删除会发生什么。 – slider

+0

是的,我正在考虑这样做,但我想知道是否有更有效的方法来做到这一点。谢谢你的反馈! –