get() 得到了一个意外的关键字参数 'pk'
get() got an unexpected keyword argument 'pk'
我正在学习如何使用 django,我正在尝试制作一些基于 class 的视图。在这种情况下,我有一个名为 Recurso 的模型,我想根据它的 id(主键)获得一个特定的模型。
这是我的观点:
class Recurso(View):
model = Recurso
def get(self, request, recurso_id):
recurso = get_object_or_404(Recurso, pk=recurso_id)
etiquetas = recurso.tags.all()
context = { 'recurso': recurso, 'lista_etiquetas': etiquetas }
return render(request, 'recurso.html', context)
这是它各自的 url:
path('proveedor/recurso/<int:recurso_id>', Recurso.as_view(), name='recurso'),
这是模特:
class Recurso(models.Model):
nombre = models.CharField(max_length=50)
tags = models.ManyToManyField(Etiqueta)
proveedor = models.ForeignKey(Proveedor, on_delete=models.CASCADE)
descripcion = models.CharField(max_length=2000, default='SOME STRING')
def __str__(self):
return self.nombre + " de " + self.proveedor.nombre
这是我得到的回溯:`
Traceback (most recent call last):
File "C:\Users\evaho\Envs\stem4Girls\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\evaho\Envs\stem4Girls\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\evaho\Envs\stem4Girls\lib\site-packages\django\views\generic\base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\evaho\Envs\stem4Girls\lib\site-packages\django\views\generic\base.py", line 98, in dispatch
return handler(request, *args, **kwargs)
File "C:\Users\evaho\stem4Girls\appSTEM4GIRLS\views.py", line 32, in get
recurso = get_object_or_404(Recurso, pk=recurso_id)
File "C:\Users\evaho\Envs\stem4Girls\lib\site-packages\django\shortcuts.py", line 76, in get_object_or_404
return queryset.get(*args, **kwargs)
Exception Type: TypeError at /proveedor/recurso/6
Exception Value: Recurso.get() got an unexpected keyword argument 'pk'
同时将视图命名为 Recurso
,它将使用 视图 class,而不是模型 class。您可以通过重命名视图来解决此问题,例如重命名为 RecursoView
:
class <strong>RecursoView</strong>(View):
model = Recurso
def get(self, request, recurso_id):
recurso = get_object_or_404(<strong>Recurso</strong>, pk=recurso_id)
etiquetas = recurso.tags.all()
context = { 'recurso': recurso, 'lista_etiquetas': etiquetas }
return render(request, 'recurso.html', context)
我强烈建议始终为您的视图使用 …View
后缀,以防止与模型发生冲突。
我正在学习如何使用 django,我正在尝试制作一些基于 class 的视图。在这种情况下,我有一个名为 Recurso 的模型,我想根据它的 id(主键)获得一个特定的模型。
这是我的观点:
class Recurso(View):
model = Recurso
def get(self, request, recurso_id):
recurso = get_object_or_404(Recurso, pk=recurso_id)
etiquetas = recurso.tags.all()
context = { 'recurso': recurso, 'lista_etiquetas': etiquetas }
return render(request, 'recurso.html', context)
这是它各自的 url:
path('proveedor/recurso/<int:recurso_id>', Recurso.as_view(), name='recurso'),
这是模特:
class Recurso(models.Model):
nombre = models.CharField(max_length=50)
tags = models.ManyToManyField(Etiqueta)
proveedor = models.ForeignKey(Proveedor, on_delete=models.CASCADE)
descripcion = models.CharField(max_length=2000, default='SOME STRING')
def __str__(self):
return self.nombre + " de " + self.proveedor.nombre
这是我得到的回溯:`
Traceback (most recent call last):
File "C:\Users\evaho\Envs\stem4Girls\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\evaho\Envs\stem4Girls\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\evaho\Envs\stem4Girls\lib\site-packages\django\views\generic\base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\evaho\Envs\stem4Girls\lib\site-packages\django\views\generic\base.py", line 98, in dispatch
return handler(request, *args, **kwargs)
File "C:\Users\evaho\stem4Girls\appSTEM4GIRLS\views.py", line 32, in get
recurso = get_object_or_404(Recurso, pk=recurso_id)
File "C:\Users\evaho\Envs\stem4Girls\lib\site-packages\django\shortcuts.py", line 76, in get_object_or_404
return queryset.get(*args, **kwargs)
Exception Type: TypeError at /proveedor/recurso/6
Exception Value: Recurso.get() got an unexpected keyword argument 'pk'
同时将视图命名为 Recurso
,它将使用 视图 class,而不是模型 class。您可以通过重命名视图来解决此问题,例如重命名为 RecursoView
:
class <strong>RecursoView</strong>(View):
model = Recurso
def get(self, request, recurso_id):
recurso = get_object_or_404(<strong>Recurso</strong>, pk=recurso_id)
etiquetas = recurso.tags.all()
context = { 'recurso': recurso, 'lista_etiquetas': etiquetas }
return render(request, 'recurso.html', context)
我强烈建议始终为您的视图使用 …View
后缀,以防止与模型发生冲突。