I need to create a filter in Django admin by a Through Model.
class Location(models.Model):
created_at = models.DateTimeField(editable=False, auto_now_add=True)
lat = models.DecimalField(max_digits=13, decimal_places=10, default=None)
lon = models.DecimalField(max_digits=13, decimal_places=10, default=None)
class Place(models.Model):
created_at = models.DateTimeField(editable=False, auto_now_add=True)
lat = models.DecimalField(max_digits=13, decimal_places=10, default=None)
lon = models.DecimalField(max_digits=13, decimal_places=10, default=None)
ways = models.ManyToManyField(location.Location, through='Way')
class Way(models.Model):
created_at = models.DateTimeField(editable=False, auto_now_add=True)
place = models.ForeignKey(Place, on_delete=models.PROTECT,)
location = models.ForeignKey(Location, on_delete=models.PROTECT,)
drive_distance = models.IntegerField(null=True, default=None,)
Way
model contains a drive_distance
between models Place
and Location
.
In the Django admin list display, I want to create a custom filter to filter out places, which has more that 0 locations where drive distance <= 100. Say, just a simple yes/no filter.
How to do it? I can create a custom filter for the model fields, for a model relation, but I can't filter by a through model values.
I use Django 3.1.