2015-10-12 3 views
0

У меня есть эти 2 модели в приложении Django:фильтра многого ко многим поля в модели Django

class Tag(models.Model): 
    name = models.CharField(max_length=100, blank=False, unique=True) 

class Article(models.Model): 
    title = models.CharField(max_length=100, blank=True, default='') 
    tags = models.ManyToManyField(Tag, blank=True) 

В моих взглядах, я хотел бы фильтра статьи и получить только статьи, в которых articles.tags содержит тег с id == 2. Как я могу это сделать ?

Я попытался

tags = Tag.objects.filter(pk=2);

articles = Article.objects.filter(len(tags) > 0), но у меня есть эта ошибка 'bool' object is not itterable.

ответ

0

Это правильный способ фильтрации manytomany в Джанго

articles = Article.objects.filter(tags__in=[2]) 

или

tags = Tag.objects.filter(pk=2) 
articles = Article.objects.filter(tags__in=tags) 
+0

Это решило, спасибо. – rocketer

+0

Существует только один тег с id '2', поэтому лучше использовать' tag = Tag.objects.get (pk = 2) ', который возвращает экземпляр' Tag' вместо 'QuerySet', вы можете использовать' tag.article_set.all() ' – aumo

+0

@aumo: Если он знает идентификатор тега, то нет необходимости вызывать обратное отношение, он может напрямую использовать решение, которое я предоставил вначале –

0

Использование

articles = Article.objects.filter(tags__id=2) 

или, если вам нужно получить экземпляр Tag тоже

tag = Tag.objects.get(id=2) 
articles = tag.article_set.all()