Reputation: 3222
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()
Upvotes: 3
Views: 323
Reputation: 1760
What you can do is define the filter field with distinct=True
:
This option can be used to eliminate duplicate results when using filters that span relationships.
Example:
release_date = django_filters.DateFromToRangeFilter(field_name='releases__date', distinct=True)
Full working example on Repl.it. Query result example: https://drf-filters-distinct--frankie567.repl.co/games/?release_date_after=2019-01-01&release_date_before=2019-12-31
Upvotes: 2
Reputation: 3222
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
Upvotes: 0
Reputation: 1
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)
Upvotes: -1