Что означает "=" в фильтре наборов запросов django на ManyToManyField?

Из документов мне не ясно, что означает условие фильтра "=" при использовании непосредственно на ManyToManyField,

Например, если у меня есть:

class Publication(models.Model):
    title = models.CharField(max_length=30)

class Article(models.Model):
    headline = models.CharField(max_length=100)
    publications = models.ManyToManyField(Publication)

Что это .filter(publications=pub) сделать здесь:

pub = Publication.objects.get(id=1) # or any other Publication
Article.objects.filter(publications=pub)
  • Будет ли он выбирать статьи, которые имеют / только эту публикацию?
  • Будет ли он выбирать статьи, в которых есть хотя бы эта публикация, среди прочих?

И что .filter(publications=pubs) значит здесь:

pubs = Publication.objects.filter(id__in=[1,2]) # or any other subset query of Publication
Article.objects.filter(publications=pubs)
  • Будет ли он выбирать статьи, которые имеют / только это подмножество публикаций?
  • Будет ли он выбирать статьи, в которых есть, по крайней мере, все публикации, среди прочих?
  • Будет ли он выбирать статьи, в которых есть хотя бы одна из этих публикаций?

1 ответ

pub = Publication.objects.get(id=1) # or any other Publication
Article.objects.filter(publications=pub)

Эта первая часть означает, что он получит все статьи, которые хотя бы связаны с публикацией с id=1.

pubs = Publication.objects.filter(id__in=[1,2]) # or any other subset query of Publication
Article.objects.filter(publications=pubs)

Эта вторая часть получит все статьи с публикациями либо с id = 1, либо с id=2.

Для получения дополнительной информации попробуйте документы Django.

Другие вопросы по тегам