как исправить ошибку администратора в django? - PullRequest
0 голосов
/ 20 января 2020

Я создал модель сниппета, зарегистрировал администратора для этой модели и создал форму для добавления записей этой модели, но при нажатии кнопки сниппета на странице администратора она возвращает меня к созданной мной форме. Это мой метод просмотров:

def snippet(request):
if request.method == "POST":
    form = SnippetForm(request.POST)

    if form.is_valid():
        form.save()
form = SnippetForm()
return render(request,'form.html',{'form':form})

Это мой form.py:

class SnippetForm(forms.ModelForm):
class Meta:
    model = Snippet
    fields = ('name', 'body')

А это мой models.py

class Snippet(models.Model):
name = models.CharField(max_length=200)
body = models.TextField()

def __str__(self):
    return self.name

Ответы [ 2 ]

1 голос
/ 20 января 2020

После сохранения формы вы должны вернуться оттуда, в противном случае будет выполнено

form = SnippetForm()
return render(request,'form.html',{'form':form})

, и вы попадете на ту же страницу.


Изменение:

def snippet(request):
    if request.method == "POST":
        form = SnippetForm(request.POST)

        if form.is_valid():
            form.save()

    form = SnippetForm()
    return render(request,'form.html',{'form':form})

Кому:

def snippet(request):
    if request.method == "POST":
        form = SnippetForm(request.POST)

        if form.is_valid():
            form.save()
            return redirect(YOUR_SUCCESS_URL)    # You have to return from here.

    form = SnippetForm()
    return render(request,'form.html',{'form':form})
0 голосов
/ 20 января 2020

Последние 2 строки вашего представления всегда выполняются, вы должны вернуть (например, некоторые HttpResponseRedirect) после того, как вы выполните form.save ()

def snippet(request):
    if request.method == "POST":
        form = SnippetForm(request.POST)

        if form.is_valid():
            form.save()
            # Here you have to return and redirect where you want to
    form = SnippetForm()
    return render(request,'form.html',{'form':form})
...