我正在學習如何使用 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'
uj5u.com熱心網友回復:
通過命名您的視圖Recurso,它將使用視圖類,而不是模型類。您可以通過重命名視圖來解決此問題,例如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為您的視圖使用后綴,以防止與模型發生沖突。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/402307.html
標籤:
