userpost() получил неожиданный аргумент ключевого слова «экземпляр»

#python #django

Вопрос:

Я практикуюсь в небольшом проекте CRUD в джанго.

вот это views.py из проекта 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 из проекта 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')

]

 

но сервер говорит

 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:UsersITSAppDataLocalProgramsPythonPython39libsite-packagesdjangodbmodelsbase.py, line 503, in __init__
 

пожалуйста, помогите мне разобраться в этом.было бы очень полезно, если бы вы дали мне небольшое объяснение. Заранее спасибо

Комментарии:

1. Это похоже userpost на модель, но вы используете ее как форму, работая с instance=get_user_data ней .

2. Вам следует подумать о том, чтобы соответствовать руководству по стилю PEP8. Например, использование заглавных слов для названий классов (моделей, форм и т. Д.) Значительно облегчит чтение вашего кода, так как ваши модели и формы будут отличаться от обычных переменных. python.org/dev/peps/pep-0008

Ответ №1:

По вашему update мнению, вы используете userpost в качестве модели, а не формы. Таким образом , вы должны (и, возможно, сначала определите) форму, которая работает на a userpost , так что:

 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) 

В urls.py , вы также забыли косую черту ( / ) между update и первичным ключом:

 urlpatterns = [
    # …
    #     slash ↓
    path('update/<int:pk>/',views.update,name='update'),
    # …
]