Filter foreign key date django_filters

Viewed 299

Currently my filter works so I can filter on name. However I also want to filter on releases (So display game that has release.date between a certain range)

How can I do that?

filters.py

class ReleaseFilter(django_filters.FilterSet):

    date =  django_filters.DateFromToRangeFilter(field_name='date') 

    class Meta:
        model = Release
        fields = ['date']

class GameFilter(django_filters.FilterSet):

    name = django_filters.CharFilter(lookup_expr='icontains')
    releases = ReleaseFilter()

    class Meta:
        model = Game
        fields = ['releases']

models.py

class Game(models.Model):
    name = models.CharField(max_length=255)


class Release(models.Model):
    game = models.ForeignKey(Game, related_name='releases', on_delete=models.CASCADE)
    date = models.DateField()
3 Answers
releases__date = django_filters.DateFromToRangeFilter()

Did the trick for me

But the problem is if I sort on it, I see duplicates in the game list. Since it outputs a game for every release date

You can use built-in model filter to do that Like as (for greater or equal than date)

Game.objects.filter(release__date__gte=date)
Related