Получив эту ошибку -__ init __ () получил неожиданный аргумент ключевого слова 'instance' - PullRequest
0 голосов
/ 11 марта 2020

я использую форму, не основанную на модели django. как только я получаю данные, я создаю модельный объект. но когда я пытаюсь отредактировать свой пост (приложение на основе блога / цитаты), я не могу создать объект формы, используя объект модели для определенного сообщения c.

это мои коды:

views.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})

models.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)

forms.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')])

1 Ответ

0 голосов
/ 11 марта 2020

Попробуйте это:

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, я тоже могу помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...