Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

313
Vistas
filtrar usuarios dentro de una distancia dada en Django rest framework

Estoy tratando de implementar un filtro personalizado en el marco de descanso de Django, que devuelve a los usuarios dentro de una distancia determinada, estoy usando filtros de Django. Supongo que la latitud y la longitud ya están proporcionadas por el front-end.

esto es lo que probé. No sé si es la forma correcta de hacerlo. tengo el siguiente error

 'RenameAttributes' object is not iterable

Aquí está mi código

Vistas.py

 def calculateDistance(lon1, lat1, lon2, lat2): lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2]) return 6371 * ( acos(sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon1 - lon2)) ) class CustomFilter(django_filters.rest_framework.DjangoFilterBackend): def filter_queryset(self, request , queryset,view): alluser = queryset newQueryset = [] distparam = request.GET.get('distance') if distparam and bool(int(distparam)): for user in alluser: current_user_long = request.user.Longitude current_user_lat = request.user.Latitude alluser_long = user.Longitude alluser_lat = user.Latitude distance = calculateDistance(current_user_long, current_user_lat, alluser_long, alluser_lat) if distance > distparam: newQueryset.push(user) return newQueryset return queryset class UserFilter(filters.FilterSet): class Meta: model = User fields =['gender', 'last_name', 'first_name' ] class UserListView(generics.ListAPIView): queryset = User.objects.all() serializer_class = UserSerializer filterset_class = UserFilter filter_backends = CustomFilter

Modelos.py

 class User(AbstractUser): username = None email = models.EmailField( max_length=100, verbose_name='email', unique=True) gender = models.CharField( max_length = 20, choices = GENDER_CHOICES, default = 'М' ) avatar= ProcessedImageField(upload_to='avatars', processors=[ResizeToFill(400, 400), Watermark()], format='JPEG', options={'quality': 72}) likes = models.ManyToManyField('User', blank=True, related_name="like") latitude = models.DecimalField(max_digits=22, decimal_places=16, blank=True, null=True) longitude = models.DecimalField(max_digits=22, decimal_places=16, blank=True, null=True) USERNAME_FIELD = 'email' REQUIRED_FIELDS = [] objects = UserManager()
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Creo que el error que aparece aquí no está relacionado con el cálculo/filtrado de la distancia, podría ser una configuración incorrecta. Asegúrese de que DEFAULT_FILTER_BACKENDS sea una tupla o una lista válida.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda