Django公司对象.get匹配查询不存在

2024-09-22 10:17:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到一个物体的所有属性。我总是收到“设备匹配查询不存在”的问题,我就是想不出我的问题。在

在模型.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)`

在视图.py在

def view_status(request, pk=None): device = Devices.objects.get(pk=pk) return render(request, 'homesite/device_status.html', device)

在网址.py在

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

here is the url I use to call http://localhost:8000/homesite/viewstatus/?pk=1

设备_卫星.html在

^{pr2}$

我的能力里有4个记录,所以我知道有一个PK=1的匹配项。在


Tags: pyviewurlmodelsrequestdevicehtmlstatus
3条回答

我收到一个错误“Devices”对象不可读取

在py网址在

这就是url的设置方式。 url(r'^viewstatus/$', views.view_status, name='ViewStatus'),

但是应该是这样的 url(r'^viewstatus/(?P<pk>\d+)/$', views.view_status, name='ViewStatus'), 这样我就可以这样打电话了对吗?http://localhost:8000/homesite/viewstatus/1/

在视图.py在

def view_status(request): pk = request.GET['pk'] device = Devices.objects.get(pk=pk) return render(request, 'homesite/device_status.html', device

所以我需要相应的视图.py要使用的代码 http://localhost:8000/homesite/viewstatus/1/

我盯着这个看了好几个小时,所以我知道我错过了一些简单的东西。在

尝试更改视图功能:

def view_status(request):
        pk = request.GET['pk']
        device = Devices.objects.get(pk=pk)
        return render(request, 'homesite/device_status.html', device)

如果有帮助请告诉我:)

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


1。方法

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

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

你写风景的方式很好:

^{pr2}$

现在,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'),

视图只接受request对象作为参数。在视图中,您可以获得如下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对象之外,您的视图不接受任何参数。在


另一个问题是在视图函数中:Django的快捷方式^{}接受一个dict对象作为可选参数context。当前直接传递设备对象。您需要在view_status中更新返回语句:

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

希望有帮助!在

相关问题 更多 >