2016-03-04 71 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

是的,我正在考慮這樣做,但我想知道是否有更有效的方法來做到這一點。謝謝你的反饋! –