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)