Problemas con uso de limit_choices_to

Hola amigos.
Siento no escribir en ingles como es el estándar.

Tratare de ser breve. Tengo un caso en el cual tengo una tabla Bomba , una CorteBomba y el detalle de esta misma DetCorteBomba.

Sucede que tengo en la tabla DetCorteBomba una foreingkey llamada id_producto que enlaza con la tabla Productos.

Necesito obtener el id_establecimiento en la tabla bombas y ponerlo como filtro usando limit_choices_to en el campo id_establecimiento para filtrar los productos del establecimiento al que esta ligado la bomba dejo un ejemplo de lo que intento conseguir.

class Bomba(models.Model):
    id = models.AutoField(primary_key=True)
    id_pais = models.ForeignKey(Pais,on_delete=models.CASCADE,verbose_name='Codigo de Pais')
    id_empresa = ChainedForeignKey(
        Empresa,
        chained_field="id_pais",
        chained_model_field="id_pais",
        show_all=False,
        auto_choose=True,
        sort=True)
    id_establecimiento = ChainedForeignKey(
        Establecimiento,
        chained_field="id_empresa",
        chained_model_field="id_empresa",
        show_all=False,
        auto_choose=True,
        sort=True)
    numero = models.IntegerField(verbose_name='Numero de Bomba:')
    descripcion = models.CharField(max_length=50)
    acum_importe = models.BooleanField(default=True)
    autoservicio = models.BooleanField(default=True)
    notas = models.CharField(max_length=100, null=True )

    class Meta:
        verbose_name = ('Bomba')
        verbose_name_plural = ('Bombas')

    def __str__(self) -> str:
        return "{}".format(self.numero)
    

class ProductoBomba (models.Model):
    id = models.AutoField(primary_key=True)
    id_pais = models.ForeignKey(Pais,on_delete=models.CASCADE,verbose_name='Codigo de Pais')
    id_empresa = ChainedForeignKey(
        Empresa,
        chained_field="id_pais",
        chained_model_field="id_pais",
        show_all=False,
        auto_choose=True,
        sort=True)
    id_establecimiento = ChainedForeignKey(
        Establecimiento,
        chained_field="id_empresa",
        chained_model_field="id_empresa",
        show_all=False,
        auto_choose=True,
        sort=True)
    id_bomba = ChainedForeignKey(
        Bomba,
        chained_field="id_establecimiento",
        chained_model_field="id_establecimiento",
        show_all=False,
        auto_choose=True,
        sort=True)
    id_producto = ChainedForeignKey(
        Producto,
        chained_field="id_establecimiento",
        chained_model_field="id_establecimiento",
        show_all=False,
        auto_choose=True,
        sort=True)
    activo = models.BooleanField(default=True)

    class Meta:
        verbose_name = ('Producto Bomba')
        verbose_name_plural = ('Productos Bombas')

    def __str__(self) -> str:
        return "{}".format(self.id)
    

class CorteBomba(models.Model):
    id = models.AutoField(primary_key=True)
    id_bomba = models.ForeignKey(Bomba, verbose_name=("Bomba:"), on_delete=models.CASCADE)
    fecha= models.DateField(default=timezone.now())
    importe_acum = models.FloatField()
    consumo_acum = models.FloatField()
    nota = models.CharField( max_length=50)
    cerrado = models.BooleanField()

    class Meta:
        verbose_name = ('Corte Bomba')
        verbose_name_plural = ('Cortes Bombas')
    
    def __str__(self) -> str:
        return "{}".format(self.fecha)
    

    
class DetCorteBomba(models.Model):
    def esta(obj):    
        #object.id_corte.id_bomba.id_establecimiento.id
        #esta = DetCorteBomba.objects.all()
        estbomba = obj.id_corte.id_bomba.id_establecimiento.value
        return {"id_establecimiento": estbomba}
    
    def idesta():
        ides = DetCorteBomba.esta(DetCorteBomba)
        return ides
    
    id = models.AutoField(primary_key=True)
    id_corte = models.ForeignKey(CorteBomba,on_delete=models.CASCADE)
    id_producto = models.ForeignKey(Producto,
                                    on_delete=models.CASCADE,
                                    related_name='producto',
                                    limit_choices_to= idesta )
    importe_ini = models.FloatField()
    consumo_ini = models.FloatField()
    importe = models.FloatField()
    consumo = models.FloatField()
    calibracion = models.FloatField()
    traslado = models.FloatField()
    precio = models.FloatField()

    class Meta:
        verbose_name =('Detalle Corte')
        verbose_name_plural = ('Detalles Cortes')
    
    def __str__(self) -> str:
        return "{}".format(self.id)

    
     

El error que me da es el siguiente
Captura