【问题标题】:get() got an unexpected keyword argument 'pk'get() 得到了一个意外的关键字参数 'pk'
【发布时间】:2022-01-03 16:26:09
【问题描述】:

我正在学习如何使用 django,并且我正在尝试制作一些基于类的视图。在这种情况下,我有一个名为 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)

这是它各自的网址:

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 模型?

标签: django django-views


【解决方案1】:

通过将视图命名为Recurso,它将使用view 类,而不是模型类。您可以通过重命名视图来解决此问题,例如改名为RecursoView

class RecursoView(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)

我强烈建议您始终为您的视图使用…View 后缀,以防止与模型发生冲突。

【讨论】:

  • 谢谢,但现在当我尝试运行服务器时,它给了我这个:path('proveedor/recurso/', RecursoView.as_view(), name='recurso') , NameError: name 'RecursoView' 没有定义
  • @EvadelHoyoOrtizdeZárate:您可能应该更改urls.py 中的import 语句以导入视图,而不是模型。
猜你喜欢
  • 2020-08-18
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 2021-10-25
  • 2021-08-05
  • 2020-05-01
  • 2016-09-17
  • 2015-06-08
相关资源
最近更新 更多