Skip to main content
 首页 » 编程设计

python之Django objects.get 匹配查询不存在

2025年01月19日31java哥

我正在尝试获取单个对象的所有属性。我不断收到“设备匹配查询不存在”。我就是想不通我的问题。

模型.py

`class Devices(models.Model): 
    category_id = models.ForeignKey(Category, on_delete=models.CASCADE) 
    device_description = models.CharField(max_length=100) 
    device_status = models.CharField(max_length=50) 
    device_date = models.DateTimeField() 
    device_user = models.CharField(max_length=50)` 

View .py

def view_status(请求,pk=None): 设备 = Devices.objects.get(pk=pk) 返回渲染(请求,'homesite/device_status.html',设备)

网址.py

url(r'^viewstatus/$', views.view_status, name='ViewStatus'),

这是我用来调用 http://localhost:8000/homesite/viewstatus/?pk=1 的 url

device_satus.html

{% extends "base.html" %}  
{% block head %}  
<title>Device Status</title>  
{% endblock%}  
{% block body %} 
<h3>Device Status Detail</h3> 
{{ devices.device_description }} 
{{ devices.device_status }} 
{{devices.device_date|date:"Y-m-d H:m:s"}} 
{% endblock %} 

我的 able 中有 4 条记录,所以我知道 PK=1 有一个匹配项。

请您参考如下方法:

请注意,这不是构建用于访问特定对象的 URL 的常用方法。下面我首先介绍在 URI 中集成 pk 的方法,然后介绍将 pk 作为参数传递的方法。


<强> 1。方法

在这里,您将 pk 放在 URI 中,并请求类似 http://localhost:8000/homesite/viewstatus/1/ 的内容。如果这样做,您需要通过指定 URI 的哪一部分是您想要的 pk 来调整您的 urls.py:

# urls.py 
url(r'^viewstatus/(?P<pk>\d+)/$', views.view_status, name='ViewStatus'), 

您编写 View 的方式很好:

def view_status(request, pk=None): 
    if pk is not None: 
        device = Devices.objects.get(pk=pk) 
    else: 
        device = None 
    return render(request, 'homesite/device_status.html', {'device' : device}) 

现在,views.view_status 将以 request 对象和 pk 作为参数和 objects.get 如果您放入 URI 的 pk 存在于您的数据库中,则将按您预期的方式运行。

请注意,这是获取对象的首选方式。


<强> 2。方法

在这种情况下,您将 pk 作为参数传递,因此调用 http://localhost:8000/homesite/viewstatus/?pk=1,例如。现在 pk 是 GET 请求的参数。在这种情况下:

# urls.py 
url(r'^viewstatus/$', views.view_status, name='ViewStatus'), 

并且 View 仅将 request 对象作为参数。在 View 中,您可以按如下方式获取 pk:

def view_status(request): 
    pk = request.GET.get('pk', None) 
    if pk is not None: 
        device = Devices.objects.get(pk=int(pk)) 
    else: 
        device = None 
    return render(request, 'homesite/device_status.html', {'device' : device}) 

所以在这种情况下,除了 request 对象之外,您的 View 不接受任何参数。


另一个问题在您的 View 函数中:Django 的快捷方式 render为可选参数 context 使用一个 dict 对象。目前您直接传递一个 Devices 对象。您需要在 view_status 中更新您的返回声明:

return render(request, 'homesite/device_status.html', {'device' : device}) 

希望对您有所帮助!