2015-12-18 4 views
0

Я создаю форму обзора пользователя, где пациенты могут оставить отзыв о своих врачах. Я только хочу войти в систему, чтобы написать отзыв и только 1 отзыв для каждого пользователя на одного врача. Пользователь отображается в форме просмотра, независимо от того, была ли она подписана. Если вы не вошли в систему, нажав кнопку «Отправить», страница будет перенаправлена ​​в форму регистрации, и после успешной проверки подлинности она будет перенаправлена ​​обратно в профиль доктора. Но данные формы теряются, когда пользователь перенаправляется.Django 1.6: Сохранять данные формы временно между страницами

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

docprofile.html

{% if reviewed == False %} 
<form action="" method="post" id="user_uploader" > {% csrf_token %} 
<div class="revbox"> 
<textarea type="text" class="form-control" id="comment" placeholder="How was your experience?" name="comment" rows="6"></textarea> 

<div class="subbox"> 
<div class="like-dis-check"> 
<p id="wouldrec"> Would you recommmend this doctor to someone else?</p> 
<input type="radio" id="radio1" name="Like" value="Like"> 
<label id="r1" for="radio1">Yes</label> 
<input type="radio" id="radio2" name="Like" value="Dislike"> 
<label id="r2" for="radio2">No</label> 
</div> 

<div class="drop1"> 
<input type="hidden" name="user" value="{{ user.id }}" /> 
<input type="hidden" name="doctor" value="{{ doctor.id }}" /> 
</div> 

{% if not user.is_authenticated %} 

<div class="subbutton"> 
<a class="btn btn-primary" href="{% url 'login' %}?next={{ request.path }}" type="" name="submit" id="ss-submit">Submit</a> 
</div> 

{% else %} 

<div class="subbutton"> 
<button class="btn btn-primary" type="submit" name="submit"id="ss-submit">Submit</button> 
</div> 

{% endif %} 


<div class="errorbox"> 
{% for field in form.visible_fields %} 
{{ field.errors }} 
{% endfor %} 
</div> 
</div> 
</div> 
</form> 
{% elif user.is_authenticated and reviewed == True %} 
<h4><a class="writebtn">Already Reviewed!</a></h4> 
{% else %} 
<a class="btn btn-primary writebtn" onclick = " ga('send','event', 'button' , 'Write a Review', 'Dr. {{doctor.name}}', 7);" href="{% url 'login' %}?next={{ request.path }}">Write a Review</a> 
{% endif %} 

view.py

def showDocProfile(request, slug): 

    doctor = get_object_or_404(Doctor, slug=slug) 

    d = getVariables(request,dictionary={'page_name': "Dr. " + doctor.name +" "+ doctor.specialization.name +"}) 

    if request.user.is_authenticated(): 
     user = request.user 

    if request.method == "POST": 
     form = UserContentForm(request.POST) 

     if form.is_valid(): 
      comment = form.cleaned_data['comment'] 


      if request.POST.get('Like') == 'Like': 
       con = UserContent(comment = comment, liked = True, disliked = False, doctor_id = doctor.id, user_id = request.user.id) 
       doctor.likes += 1 
       doctor.netlikes = doctor.likes - doctor.dislikes 
       doctor.save() 
       con.save() 

      elif request.POST.get('Like') == 'Dislike': 
       con = UserContent(comment = comment, liked = False, disliked = True, doctor_id = doctor.id, user_id = request.user.id) 
       doctor.dislikes +=1 
       doctor.netlikes = doctor.likes - doctor.dislikes 
       doctor.save() 
       con.save() 

      url = '/docprofile/%s' % str(doctor.id) 
      return HttpResponseRedirect(url) 
    else: 
     form = UserContentForm() 

    UGC = UserContent.objects.filter(doctor_id=doctor.id).order_by('-submitted_on') # Reviews on Meddy 


    d.update({'doctor': doctor, 'UGC': UGC,'form': form, 'doctors': Doctor.objects.all().order_by('-rating')}) 
    return render(request, 'm1/docprofile.html', d) 
+0

Сеанс действительно, как вы могли бы сделать это. Но я ничего не вижу в этом коде, который перенаправляет, если пользователь не вошел в систему; где это происходит? –

+0

в docprofile. {% if not user.is_authenticated%}. Когда пользователь нажимает кнопку отправки, он перенаправляется на страницу входа. –

ответ

0

Ведение перенаправлять в шаблоне неправильное место. Если вы это сделаете, нет возможности сохранить его в сеансе. Вместо этого, вы всегда должны представить вашему showDocProfile зрения, и сделать редирект там, если необходимо:

if request.user.is_authenticated(): 
    user = request.user 
else: 
    request.session['doctor_data'] = request.POST 
    return redirect("{}?{}".format(reverse('login'), request.path)) 
if request.method == "POST": 
... 
else: 
    data = request.session.pop('doctor_data', None) 
    form = UserContentForm(data) 
... 
+0

, но таким образом пользователи даже не могут видеть профиль врача без входа в систему, не говоря уже о попытке написать отзыв. Я хочу запросить логин при отправке формы. –

+0

ОК, поэтому переместите эту логику внутри проверки 'request.method == POST'. –

Смежные вопросы