2
내가 나에게 거리 (그래서 가장 가까운 첫 번째)에 의해 주문 (20)에 가장 가까운 사용자를 제공하는 데이터베이스 쿼리를 만들려고 노력하고 예상대로 작동하지 않는 때라도order_by ('- 거리') 내가 뭐하는 거지
distance_mi = 100
origin = GEOSGeometry('SRID=4326;'+ 'POINT('+ str(user_profile.current_location.x)+' '+str(user_profile.current_location.y)+')')
close_users = UserProfile.objects.exclude(user = user).filter(current_location__distance_lte=(origin, D(mi=distance_mi))).distance(origin).order_by('-distance')[:20]
하지만, 이것은 3 명의 사용자 (올바른)를 반환하지만 첫 번째 사용자는 0 마일 떨어져 있고, 두 번째 사용자는 8 마일 떨어져 있으며 세 번째 사용자는 0 마일 떨어져 있습니다. 마지막 사용자가 8 마일 사용자 인 것을 제외하고입니다.
내가 뭘 잘못하고 있는지 잘 모르겠다.
또한, UserProfile
이 UserProfile
하나 이상의 지리적 필드가 포함 된 이후 다음과 같은 모델
class UserProfile(models.Model):
# This field is required.
user = models.OneToOneField(User)
# Other fields here
current_location = models.PointField(null = True)
seller_current_location = models.PointField(null = True)
objects = models.GeoManager()
def __unicode__(self):
return u'%s' % (self.user.get_full_name())
'UserProfile'은'current_location' 이외의 지리학 적 필드를 포함합니까? 그렇다면'distance()'가 예상 한 것과 다른 필드를 사용하고있을 수 있습니다. 'field_name' 인자에 대해'distance()'에 대한 [docs] (https://docs.djangoproject.com/en/dev/ref/contrib/gis/geoquerysets/#geoqueryset-methods)를보십시오. –
또한, "가장 가까운 것"을 원한다면 "거리"를 주문해야합니다. (비록 당신이보고하는 정렬되지 않은 결과를 설명하지는 않지만). –
@KevinHenry 네, 업데이트에 두 개의 PointFields pleace가 있습니다. 둘 다에 대해 field_names를 지정해야합니까? – Jonathan