0

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.

danilr
  • 1
  • Check this url, looks like this is what you are looking for: https://stackoverflow.com/questions/12170267/django-filter-many-to-many-field-in-admin – MrGre4a Apr 10 '21 at 20:05
  • Hey MrGre4a! Thanks, but it's not what I'm looking for. I need a customer filter, like this one https://d.pr/i/j2281U – danilr Apr 10 '21 at 20:37

0 Answers0