簡體   English   中英

django中的多個過濾器

[英]Multiple filters in django

我想過濾只適合選定類型的電影,例如:

def get_queryset(self):
    queryset = Movie.objects.all()
    if 'genres' in self.request.GET:
        queryset = queryset.filter(genre__in=self.request.GET.getlist('genres'))
    return queryset

此過濾器顯示適合至少一個要過濾的電影,但我想顯示適合所有選定類型的電影,如“喜劇、恐怖、幻想”,並且所有選定類型都必須在電影類型中如何貓我做這個?

楷模:

class Genre(models.Model):
    title = models.CharField('Title', max_length=100)
    description = models.TextField('Description')
    slug = models.SlugField(max_length=100, unique=True)

class Movie(models.Model):
    title = models.CharField('Title', max_length=100)
    tagline = models.CharField('Tagline', max_length=200, default='')
    description = models.TextField('Description')
    poster = models.ImageField('Poster', upload_to='movies/')
    country = models.CharField('Country', max_length=50)
    actors = models.ManyToManyField(
        Actor, verbose_name='actors', related_name='film_actor'
    )
    genres = models.ManyToManyField(
        Genre, verbose_name='genres', related_name='genres'
    )
    category = models.ForeignKey(
        Category,
        verbose_name='category',
        related_name='category',
        on_delete=models.SET_NULL,
        null=True
    )
    slug = models.SlugField(max_length=100, unique=True)

如果您正在尋找快速修復,我相信這已經在這里得到很好的回答: Django filter queryset __in for *every* item in list

簡而言之,如果你有一小部分流派(最多大約 5 種),那么你可以為每個流派添加.filter()

Movie.objects.filter(genre='genre1').filter(genre='genre2')....

參考: https://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships

也許你正在尋找這個?

genre = ['horror', 'comedy'] (dummy list of genre)
queryset = queryset.objects.filter(genre__in=genre)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM