首页 > 解决方案 > 出现此错误-__init__() 得到了一个意外的关键字参数“实例”

问题描述

我使用非基于模型的表单 django。一旦我得到数据,我就会创建一个模型对象。但是当我尝试编辑我的帖子(基于博客/引用的应用程序)时,我无法使用特定帖子的模型对象创建表单对象。

这些是我的代码:

视图.py:

def quote_form(request):
if request.method=='POST':
    form=Quote(request.POST)
    if form.is_valid():
        quote=form.cleaned_data['quote']
        author=form.cleaned_data['author']
        popularity=form.cleaned_data['popularity']
        category=form.cleaned_data['category']
        p=Quote1(quote=quote, author=author, popularity=popularity, category=category)
        p.save()
        return redirect("quote_list")
else:
    form=Quote()
    return render(request,'quote/form.html',{'form':form})


def quote_edit(request, pk):
    q = get_object_or_404(Quote1, pk=pk)
    if request.method == "POST":
        form = Quote(request.POST,instance=q)
        if form.is_valid():
            q = form.save(commit=False)
            q.author = request.user
            q.save()
            return redirect('quote_detail', pk=q.pk)
            #return render(request,"blog/post_detail.html",{'post':post})
    else:
        form = Quote(instance=q)
        return render(request, 'quote/quote_edit.html', {'form': form})

模型.py:

class Quote1(models.Model):
    quote=models.CharField(max_length=200)
    author=models.CharField(max_length=200)
    popularity=models.IntegerField()
    category=models.CharField(max_length=40)

表格.py:

class Quote(forms.Form):
    quote=forms.CharField()
    author=forms.CharField()
    popularity=forms.IntegerField()
    category=forms.ChoiceField(choices=[('life','life'),('happiness','happiness'),('love','love'),('truth','truth'),
                                    ('inspiration','inspiration'),('humor','humor'),('philosophy','philosophy'),('science','science')])

标签: pythondjango

解决方案


尝试这个:

def quote_edit(request, pk): 
    q = get_object_or_404(Quote1, pk=pk) 
    if request.method == "POST": 
    form = Quote(request.POST) 
    if form.is_valid():  
        quote=form.cleaned_data['quote'] 
        author=form.cleaned_data['author']
        popularity=form.cleaned_data['popularity']
        category=form.cleaned_data['category'] 
        q.quote=quote
        q.author=author
        q.popularity=popularity
        q.category=category
        q.save()
    else: 
        form = Quote(initial=reauest.POST.copy())
        return render(request, 'quote/quote_edit.html', {'form': form})

PS:使用 ModelForm 会是更好的方法。如果您可以切换到 ModelForm,我也可以提供帮助。


推荐阅读