"Возвращение на эту страницу может привести к повторению любых действий, которые Вы предприняли" - Django

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

The page that you're looking for used information that you entered.
Returning to that page might cause any action you took to be repeated.
Do you want to continue?

очевидно, я не хочу иметь одну и ту же информацию более одного раза в моей базе данных.

на всякий случай: это мой код (я знаю, что есть много дерьма, которое должно быть удалено):

#views.py
@login_required
def subject(request,username, subject_name):
    subject_id = Subjects.objects.filter(user = request.user).get(name=subject_name)
    #Upload form
    if request.method == "POST":
        if "upload-b" in request.POST:
            form = ContentForm(request.POST, request.FILES, instance=subject_id)       
            if form.is_valid(): # need to add some clean functions
                 up_f = FileDescription.objects.get_or_create(subject=subject_id,
                                                  subject_name=subject_name,
                                                  file_type=request.POST['file_type'],
                                                  file_uploaded_by = username,
                                                  file_name=request.POST['file_name'],
                                                  file_description=request.POST['file_description'],
                                                  image = request.FILES['image'],
                                                  )
form = ContentForm()

#Show uploaded files with respect to clicked session (Homework, Class , Random ... )
homework_files = Homework.homework.filter(subject_name__exact=subject_name,
                                         file_uploaded_by__exact=username)
class_files = ClassPapers.classpapers.filter(subject_name__exact=subject_name)
random_files = RandomPapers.randompapers.filter(subject_name__exact=subject_name,
                                           file_uploaded_by__exact=username)




return render_to_response('subject_content.html', {'form':form,
                                                   'subject_name': subject_name,
                                                   'class_files': class_files,
                                                   'homework_files': homework_files,
                                                   'class_files': class_files,
                                                   'random_files': random_files,
                                                   },
                           context_instance=RequestContext(request))


#forms.py:
class ContentForm(forms.ModelForm):
    file_name =forms.CharField(max_length=255, widget=forms.TextInput(attrs={'size':20}))
    file_description = forms.CharField(widget=forms.Textarea(attrs={'rows':4, 'cols':25}))
    class Meta:
        model = FileDescription 
        exclude = ('subject', 'subject_name', 'file_uploaded_by')


#template
    <div id="sbj-creation-frm">
        <h3>Upload File</h3>
        <form action="." method="post" enctype="multipart/form-data">{% csrf_token %}
            {{ form.as_p }}
            <input type="submit" value="submit" name="upload-b" class="btn-create" />
        </form>
    </div>

2 ответов


это сообщение из браузера; и оно будет отображаться в любое время при попытке обновить страницу, которая была отображена в результате запроса POST.

Он не имеет никакого отношения к вашему коду, браузер будет отображать одно и то же сообщение на всех веб-сайтах, где вы пытаетесь обновить страницу (нажмите Ф5 например), который был отображен в результате предыдущего запроса POST.

чтобы этого не произошло, убедитесь, что все запросы POST перенаправляются на другое представление завершение; а не сами шаблоны рендеринга.


просто перенаправить страницу на текущую страницу после вставки , это очистит все значения и избежать добавления дубликатов записей !

пример:

protected void btnAdd_Click(object sender, EventArgs e)
{
 //your code 
 Response.Redirect("Currentpage.aspx",true);

 //or 
 Response.Redirect(Request.Url.AbsoluteUri);
}