2015-09-04 55 views
0

我正在使用Django ManyToManyField爲標籤分配照片。我把M2M字段放在標籤模型中:Django ManyToManyField從相關模型中獲取不在連接表中的記錄

class Tags(models.Model): 
    tag = models.CharField(max_length=100, blank=True, null=True) 
    photos = models.ManyToManyField(Photos) 

它工作正常。

photo = Photos.objects.get(id=int(photo_id)) 
photo_tags = photo.tags_set.all() 

然後給用戶的所有標籤的列表,以便他們可以,我使用它們分配的照片:我可以用得到分配給照片的所有標籤

tag_list = Tags.objects.order_by('tag') 

不過,我想將此列表限制爲尚未分配給照片的標籤,例如標籤不在該照片的連接表中。

但卡在這裏使用什麼ORM邏輯。有沒有像tags_set_none或過濾器(tags_set = None)?

+0

您可以獲取這些標籤的ID並直接過濾標籤以包含除這些標籤以外的所有標籤。我不知道這是否是最好的方法,因爲這需要2個查詢,但應該是有效的。 – cdvv7788

回答

1
tags = Tags.objects.exclude(photos=photo) 
+0

該死的工作!太容易了。我怎麼會從Django文檔中自己想出來的?也許是Django ORM魔術可用的便利列表?嗯thx – curtisp

+0

@genoki https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_many/ – f43d65

相關問題