Estoy practicando un pequeño proyecto CRUD en django.
aquí está el views.py de crudproject
from django.contrib import messages from django.shortcuts import get_object_or_404, redirect, render from .models import userpost from .forms import customerform #creating postdate def create(request): form= customerform() if request.method=='POST': Form=customerform(request.POST) if Form.is_valid(): Form.save() Form={} context ={'form':form} return render(request,'create.html',context) #reading the post def read(request): user_data=userpost.objects.all() context ={ 'user_data':user_data} return render(request,'read.html',context) #Updating the post def update(request,pk): get_user_data=get_object_or_404(userpost,pk=pk) form= userpost(instance=get_user_data) if request.method=='POST': form=userpost(request.POST,isinstance=get_user_data) if form.is_valid(): form.save() messages.success(request,'User data has been Updated') return redirect('read') context={'form':form} return render(request,'update.html',context) #deleting the post def delete(request,pk): get_user=get_object_or_404(userpost,pk=pk) get_user.delete() messages.error(request,'User deleted') return redirect('/')urls.py del proyecto crud
from django.urls import path from .import views urlpatterns = [ path('new/',views.create,name='create'), path('update<int:pk>/',views.update,name='update'), path('delete/<int:pk>/',views.delete,name='delete'), path('',views.read,name='read') ]pero el servidor dice
TypeError at /update8/ userpost() got an unexpected keyword argument 'instance' Request Method: GET Request URL: http://localhost:8000/update8/ Django Version: 3.2.8 Exception Type: TypeError Exception Value: userpost() got an unexpected keyword argument 'instance' Exception Location: C:\Users\ITS\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\base.py, line 503, in __init__Por favor, ayúdame a resolver esto. Sería de mucha ayuda si me das una pequeña explicación. Gracias por adelantado
En su vista de update , usa la publicación de userpost como modelo, no como un formulario. Por lo tanto, debería (y quizás primero definir) un formulario que funcione en una userpost de usuario, entonces:
def update(request,pk): get_user_data = get_object_or_404(userpost,pk=pk) if request.method=='POST': # ↓ work with a form form = UserPostForm(request.POST, request.FILES, instance=get_user_data) if form.is_valid(): form.save() messages.success(request,'User data has been Updated') return redirect('read') else: # ↓ work with a form form= UserPostForm(instance=get_user_data) context={'form':form} return render(request,'update.html',context) En urls.py , también olvidó una barra inclinada ( / ) entre la update y la clave principal:
urlpatterns = [ # … # slash ↓ path('update/<int:pk>/',views.update,name='update'), # … ]