2015-03-17 6 views
0

Я довольно новичок в Django, и я пытаюсь создать свое первое приложение. Однако сейчас я столкнулся с проблемой.Django with ajax render

У меня есть форма (добавить Alert - my mdoel) с проверкой Django и div со списком всех предупреждений. Если я правильно заполню все поля, добавляется предупреждение, а мой div с предупреждениями обновляется с помощью ajax. Проблема заключается в проверке формы.

Без ajax Я отправлял связанную форму с errorLists для каждого поля. Я использовал API Django. Он работал нормально, но я не могу обновить список ошибок, если добавить форму не удалось.

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

Гроздь кода, первый это метод вид я называю:

def add_alert(request): 
    report = __get_or_create_empty_Report(request) 
    if request.method == 'POST': 
     form = AlertForm(request.POST) 
     if form.is_valid(): 

      alert_project = "" 
      alert_name = "" 
      alert_ticket = "" 
      alert_date = "" 
      alert_type = "" 
      alert_comment = "" 

      if form.cleaned_data.has_key('alert_project'): 
       alert_project = form.cleaned_data['alert_project'] 
      if form.cleaned_data.has_key('alert_name'): 
       alert_name = form.cleaned_data['alert_name'] 
      if form.cleaned_data.has_key('alert_ticket'): 
       alert_ticket = form.cleaned_data['alert_ticket'] 
      if form.cleaned_data.has_key('alert_date'): 
       alert_date = form.cleaned_data['alert_date'] 
      if form.cleaned_data.has_key('alert_type'): 
       alert_type = form.cleaned_data['alert_type'] 
      if form.cleaned_data.has_key('alert_comment'): 
       alert_comment = form.cleaned_data['alert_comment'] 

      alert = Alert() 
      alert.alt_prj_id = get_object_or_404(Project, prj_id=alert_project) 
      alert.alt_name = alert_name 
      alert.alt_ticket = alert_ticket 
      alert.alt_date = alert_date 
      alert.alt_type = alert_type 
      comment = Comment() 
      comment.com_value = alert_comment 
      comment.save() 
      alert.alt_com_id = comment 
      alert.alt_rep_id = report 

      alert.save() 
      alerts = Alert.objects.filter(alt_rep_id=report.rep_id) 
      return render(request, 'main/theform.html', {'form': form, 'alerts': alerts, 'error_message': "Alert has been added"}) 
    else: 
     form = AlertForm() 
     alerts = Alert.objects.filter(alt_rep_id=report.rep_id) 
     return render(request, 'main/theform.html', {'form': form, 'alerts': alerts}) 

    alerts = Alert.objects.filter(alt_rep_id=report.rep_id) 
    return render(request, 'main/theform.html', {'form': form, 'alerts': alerts, 'error_message': "Alert has NOT been added"}) 

Вот шаблон формы:

{% extends 'main/base.html' %} 


{% block content %} 
    <div id="alerts"> </div> 
     {% for alert in alerts %} 
      <p> {{ alert.alt_name }} </p> 
     {% endfor %} 


     <form class="col-md-12" action="{% url 'main:add_alert' %}" method="post"> 
      {% csrf_token %} 
      {{ form.as_p }} 
      <input type="submit" value="Submit" /> 
     </form> 
     {{ error_message }} 


{% endblock %} 

и простой скрипт:

$(document).ready(function() { 

     //AJAX util 
     $('.add-alert-form').submit(function (e) { 
      e.preventDefault(); 
      $.ajax({ 
       type: "POST", 
       url: $(this).attr("action"), 
       data: $(this).serialize(), 

       success: function (data) { 
        $("#alerts").load(" #alerts"); 
       } 
      }); 
     }); 
    } 

Я думаю, я делаю это совершенно неправильно, но я понятия не имею, как правильно.

ответ

0

Посмотрите на https://docs.djangoproject.com/en/1.7/topics/forms/modelforms/ , так что ваши мнения будут выглядеть так:

 if form.is_valid(): 
      obj = form.save() 
      data = serializers.serialize('json', [obj,]) 
     else: 
      data = json.dumps(dict([(k, [unicode(e) for e in v]) for k,v in form.errors.items()])) 

     return HttpResponse(data, mimetype='application/json')