1
현재 웹 페이지는 거리별로 정렬 된 결과 목록을 표시합니다 (ListView와 유사). 내가하고 싶은 것은 필터를 만들어 이러한 결과를 더 좁히는 것입니다.함수 기반 뷰를 사용하여 Geodjango 결과 필터링
Views.py
def teacher_list(request, **kwargs):
if request.method == 'GET':
form = LocationForm(request.GET)
if form.is_valid():
SearchPoint = Point(form.cleaned_data['Lng'], form.cleaned_data['Lat'])
Radius = form.cleaned_data['SearchRadius']
Type = form.cleaned_data['Type']
else:
form = LocationForm()
SearchPoint = Point(0, 0)
Radius = form.cleaned_data['SearchRadius']
else:
form = LocationForm()
SearchPoint = Point(0, 0)
Radius = form.cleaned_data['SearchRadius']
results = Teacher.objects.filter(location__distance_lte=
(SearchPoint, D(km=Radius)))\
.annotate(distance=Distance('location', SearchPoint))\
.order_by('distance')
return render(request, "users/teacher_list.html", context={"form": form,"teacher_list":results,})
현재 필터링 작품,하지만 범주 변수. 예를 들어 위치 또는 검색 반경을 변경하면 양식이 업데이트되고 새로운 결과가 표시됩니다.
그러나 나는 TYPE
이라는 범주 형 변수가 있는데,이 변수는 FREE 또는 PAID 일 수 있습니다. 사람이 무료 필터를 선택하면 무료 결과 만 표시하고 반대의 경우도 표시합니다. 내 모델의 부울 필드입니다.
class Teacher(models.Model):
free = models.BooleanField()
paid = models.BooleanField()
내가 추가 시도하는 것은
if Type == 'Free':
filter_variable = 'free=True'
elif Type == 'Paid':
filter_variable = 'paid=True'
else:
filter_variable =''
new_result_set = results.filter(filter_variable)
유사하게 작동합니다 필터 매개 변수의 일종이 필터링 할 수있는 효율적인 방법입니다? 나는 장고 필터를 들여다 보았지만 geodjango와 호환되지 않는 것처럼 보이고 내가 필요로하는 것이 과잉이라고 생각한다.
고맙습니다. template.html에서 옵션에 선택된 태그를 넣어서 현재 선택된 태그를 반영 할 수있는 방법이 있습니까? 예 : – Roma
네,하지만 귀하의 질문에 대한 자세한 내용을 이해할 수 없다고 생각합니다. 성공을 찾지 못하면 질문을 작성하여 검색 할 수 있습니다. –
고마워, 나는 약간 연구를하고 부호를 시도 할 필요가있다. 알아낼 수 없다면, 나는 새 질문을 할 것이다. – Roma