in geodjango, as you know ST_Distance operation can use with Geography columns. The error you get is
"ST_Distance output only available on GeometryFields" about lack of the geographic field in your model.
The more important think is that if you want to make spatial lookup, GeoManager is required even if the model does not have a geographic field itself, e.g., in the case of a ForeignKey relation to a model with a geographic field.
you can get some information about GeoManager here.
In order to conduct geographic queries, each geographic model requires
a GeoManager model manager. This manager allows for the proper SQL
construction for geographic queries; thus, without it, all geographic
filters will fail. It should also be noted that GeoManager is required
even if the model does not have a geographic field itself, e.g., in
the case of a ForeignKey relation to a model with a geographic field.
For example, if we had an Address model with a ForeignKey to our
from django.contrib.gis.db import models
from django.contrib.localflavor.us.models import USStateField
num = models.IntegerField()
street = models.CharField(max_length=100)
city = models.CharField(max_length=100)
state = USStateField()
zipcode = models.ForeignKey(Zipcode)
objects = models.GeoManager()
The geographic manager is needed to do spatial queries on related Zipcode objects, for example:
qs = Address.objects.filter(zipcode__poly__contains='POINT(-104.590948 38.319914)')
i hope it helps you....