如何处理可选的 GET 参数?
How to deal with optional GET argument?
我有一个 GET 请求,有时有 pk
参数,有时没有。
我想有 1 个视图来处理它,但我尝试编写它没有成功。这是我拥有的:
@ajax
@login_required
def search_dist(request):
try:
pk = request.GET.get('pk')
except Exception:
dist_list = request.user.distributors.all()
starts_with = request.GET.get('query')
if starts_with:
dist_list = request.user.distributors.filter(
surname__istartswith=starts_with)
return render(request, 'distributors/distributors_list.html', {'distributors': dist_list})
else:
dist_list = request.user.distributors.filter(
distributors_of_links=get_object_or_404(Link, pk=pk))
starts_with = request.GET.get('query')
if starts_with:
dist_list = request.user.distributors.filter(distributors_of_links=get_object_or_404(
Link, pk=pk)).filter(surname__istartswith=starts_with)
return render(request, 'distributors/distributors_list.html', {'distributors': dist_list})
我的部分模型:
class Distributor(models.Model):
class Link(models.Model):
distributors = models.ManyToManyField(
Distributor, blank=True, related_name='distributors_of_links')
class UserProfile(AbstractUser):
distributors = models.ManyToManyField(
Distributor, blank=True, related_name='distributors_of_user')
查询:search_dist?query=V
我有:
GET /distributors/search_dist 404 NOT FOUND
No Link matches the given query.
我做错了什么?
pk = request.GET.get('pk')
不引发异常。如果 pk 不在 GET 中,它会为您提供 None
。
所以你的第一个案例永远不会执行。
尝试:
@ajax
@login_required
def search_dist(request):
pk = request.GET.get('pk', None)
if pk is None:
dist_list = request.user.distributors.all()
starts_with = request.GET.get('query')
if starts_with:
dist_list = request.user.distributors.filter(
surname__istartswith=starts_with)
return render(request, 'distributors/distributors_list.html', {'distributors': dist_list})
else:
dist_list = request.user.distributors.filter(
distributors_of_links=get_object_or_404(Link, pk=pk))
starts_with = request.GET.get('query')
if starts_with:
dist_list = request.user.distributors.filter(distributors_of_links=get_object_or_404(
Link, pk=pk)).filter(surname__istartswith=starts_with)
return render(request, 'distributors/distributors_list.html', {'distributors': dist_list})
我有一个 GET 请求,有时有 pk
参数,有时没有。
我想有 1 个视图来处理它,但我尝试编写它没有成功。这是我拥有的:
@ajax
@login_required
def search_dist(request):
try:
pk = request.GET.get('pk')
except Exception:
dist_list = request.user.distributors.all()
starts_with = request.GET.get('query')
if starts_with:
dist_list = request.user.distributors.filter(
surname__istartswith=starts_with)
return render(request, 'distributors/distributors_list.html', {'distributors': dist_list})
else:
dist_list = request.user.distributors.filter(
distributors_of_links=get_object_or_404(Link, pk=pk))
starts_with = request.GET.get('query')
if starts_with:
dist_list = request.user.distributors.filter(distributors_of_links=get_object_or_404(
Link, pk=pk)).filter(surname__istartswith=starts_with)
return render(request, 'distributors/distributors_list.html', {'distributors': dist_list})
我的部分模型:
class Distributor(models.Model):
class Link(models.Model):
distributors = models.ManyToManyField(
Distributor, blank=True, related_name='distributors_of_links')
class UserProfile(AbstractUser):
distributors = models.ManyToManyField(
Distributor, blank=True, related_name='distributors_of_user')
查询:search_dist?query=V
我有:
GET /distributors/search_dist 404 NOT FOUND
No Link matches the given query.
我做错了什么?
pk = request.GET.get('pk')
不引发异常。如果 pk 不在 GET 中,它会为您提供 None
。
所以你的第一个案例永远不会执行。
尝试:
@ajax
@login_required
def search_dist(request):
pk = request.GET.get('pk', None)
if pk is None:
dist_list = request.user.distributors.all()
starts_with = request.GET.get('query')
if starts_with:
dist_list = request.user.distributors.filter(
surname__istartswith=starts_with)
return render(request, 'distributors/distributors_list.html', {'distributors': dist_list})
else:
dist_list = request.user.distributors.filter(
distributors_of_links=get_object_or_404(Link, pk=pk))
starts_with = request.GET.get('query')
if starts_with:
dist_list = request.user.distributors.filter(distributors_of_links=get_object_or_404(
Link, pk=pk)).filter(surname__istartswith=starts_with)
return render(request, 'distributors/distributors_list.html', {'distributors': dist_list})