2015-09-04 59 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

相关问题