我在Django 1.11,我想结合我读到的内容:
-
https://docs.djangoproject.com/fr/1.11/ref/models/conditional-expressions/
-
https://docs.djangoproject.com/fr/1.11/topics/class-based-views/generic-display/
-
https://docs.djangoproject.com/fr/1.11/ref/models/querysets/#django.db.models.Q
例如,假设我有这样的东西,将检查对象是否在用户区域,ListView使用它 .
open_help_requests = HelpRequest.objects.filter(state=HelpRequest.OPEN)
filtered_help_requests = []
for help_request in open_help_requests:
""" Formule de Haversine pour connaitre la distance entre deux points géographiques """
earth_radius = 6373.0
lat1 = radians(help_request.student.studentcollaborator.postal_code.latitude)
lon1 = radians(help_request.student.studentcollaborator.postal_code.longitude)
lat2 = radians(request.user.student.studentcollaborator.postal_code.latitude)
lon2 = radians(request.user.student.studentcollaborator.postal_code.longitude)
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
distance = earth_radius * c
if distance <= help_request.settings.distance:
filtered_help_requests.append(help_request)
我想在 def get_queryset(self): 中的 filter 内移动此条件检查,以便我可以使用过滤的QuerySet直接进行其他简单的顺序/过滤操作 . 使用已过滤的变量列表ID重新创建QuerySet看起来太重(例如:Django get a QuerySet from array of id's in specific order) .
有任何想法吗 ?
谢谢 .
1 回答
我不太清楚我很了解你 . 无论如何,为您的模型
models.Manager
创建自定义models.QuerySet
怎么样?在您的自定义
models.QuerySet
中,您可以为订购/过滤目标创建自己的功能 .在您的视图中,您可以直接获取对象的过滤/有序列表 .
在你看来: