Отношения второго уровня (аналогично Rails's has_many :through)

У меня есть следующая модель установки (неактуальные части удалены):

class Client(models.Model):
    name = models.CharField(max_length=200, unique=True)

class Vehicle(models.Model):
    client = models.ForeignKey(Client, on_delete=models.PROTECT, related_name="vehicles")
    vin = models.CharField(max_length=200, unique=True)

class Chip(models.Model):
    vehicle = models.ForeignKey(Vehicle, on_delete=models.PROTECT)
    serial_number = models.CharField(max_length=200, unique=True)

Есть ли простой способ получить все чипы, принадлежащие определенному клиенту (через таблицу Vehicle)? Что-то похожее на has_many :through в Rails?

Хотелось бы иметь возможность называть что-л. как:

client = Client.objects.first()
chips = client.chips.all()

В итоге я поместил это в модель, чтобы сохранить компактность представления:

class Client(models.Model):

    ...

    @property
    def chips(self):
        return Chip.objects.filter(vehicle__client=self)
Вернуться на верх