Django 通过查询字符串获取模型
Django get model by querystring
我希望用户能够像 https://example.com/models?id=232
一样在 url 中传递查询字符串。但查询字符串是可选的。所以 https://example/models
应该也可以。我正在尝试这个:
def myview(request, model):
context = {
'model': model,
}
if request.GET.get('id', None) != None and Model.objects.get(pk=request.GET.get('id', None)).exists():
id = request.GET.get('id', None)
context['id'] = id
return render(request, 'tests.html', context)
else:
return render(request, 'tests.html', context)
S 上面的代码发生了什么:我想检查是否有查询字符串(即模型 ID)以及是否存在该模型。但是我的代码不起作用。如果这两个要求都不满足,它应该只加载 tests.html
而没有 id
并且没有任何错误。我怎样才能做到这一点? id
也应该只是数字
期待您的回答 :D
您将收到错误 AttributeError: 'ModelName' object has no attribute 'exists'
,因为 .exists()
函数可用于 .filter(...)
方法。
def myview(request, model):
id = request.GET.get('id', None)
context = {'model': model, 'id': id}
if id is not None and id.isdigit():
if ModelName.objects.filter(pk=id).exists():
context['id'] = id
return render(request, 'tests.html', context)
另一种方法,您也可以使用 ModelName.DoesNotExist
;
除外
# ...
from django.http import Http404
def myview(request, model):
id = request.GET.get('id', None)
context = {'model': model, 'id': id}
if id is not None and id.isdigit():
try:
obj = ModelName.objects.get(pk=id)
context.update({'id': obj.id})
except ModelName.DoesNotExist:
raise Http404
return render(request, 'tests.html', context)
我希望用户能够像 https://example.com/models?id=232
一样在 url 中传递查询字符串。但查询字符串是可选的。所以 https://example/models
应该也可以。我正在尝试这个:
def myview(request, model):
context = {
'model': model,
}
if request.GET.get('id', None) != None and Model.objects.get(pk=request.GET.get('id', None)).exists():
id = request.GET.get('id', None)
context['id'] = id
return render(request, 'tests.html', context)
else:
return render(request, 'tests.html', context)
S 上面的代码发生了什么:我想检查是否有查询字符串(即模型 ID)以及是否存在该模型。但是我的代码不起作用。如果这两个要求都不满足,它应该只加载 tests.html
而没有 id
并且没有任何错误。我怎样才能做到这一点? id
也应该只是数字
期待您的回答 :D
您将收到错误 AttributeError: 'ModelName' object has no attribute 'exists'
,因为 .exists()
函数可用于 .filter(...)
方法。
def myview(request, model):
id = request.GET.get('id', None)
context = {'model': model, 'id': id}
if id is not None and id.isdigit():
if ModelName.objects.filter(pk=id).exists():
context['id'] = id
return render(request, 'tests.html', context)
另一种方法,您也可以使用 ModelName.DoesNotExist
;
# ...
from django.http import Http404
def myview(request, model):
id = request.GET.get('id', None)
context = {'model': model, 'id': id}
if id is not None and id.isdigit():
try:
obj = ModelName.objects.get(pk=id)
context.update({'id': obj.id})
except ModelName.DoesNotExist:
raise Http404
return render(request, 'tests.html', context)