2017-02-03 20 views
0

私のモデルに保存方法がありますが、これはフィールドの検証に使用します(前のビューでこれを行いましたが、面倒でした!私はフォームの検証でいくつかの困難を抱えていたので、フォームではなくオブジェクトを保存しています。保存メソッドがオブジェクトの保存時にトリガーされない

以前の保存メソッドは使用していませんでしたが、.save()コマンドを使用したときにトリガーされると仮定していますか?鉱山はまったく起動していません...また、is_valid()を使用するときにフォーム用のclean()メソッドが実行されることを理解しているので、ここでは役に立ちません。ここで

は、Ajaxに

@login_required 
def createtimesheet(request): 
    if request.method == "POST": 
     print "creating timesheet" 
     # Get the person from the previous view 
     person_object = request.session.get('person') 
     person = Person.objects.get(id=person_object) 
     # get the POST data 
     start_date = request.POST.get('datestart') 
     end_date = request.POST.get('dateend') 
     start_date_formatted = datetime.strptime(start_date, "%m/%d/%Y") 
     end_date_formatted = datetime.strptime(end_date, "%m/%d/%Y") 
     start_date_print = start_date_formatted.strftime("%B")[0:3] + ". " + start_date_formatted.strftime("%d") + ", " + start_date_formatted.strftime("%Y") 
     end_date_print = end_date_formatted.strftime("%B")[0:3] + ". " + end_date_formatted.strftime("%d") + ", " + end_date_formatted.strftime("%Y") 

     response_data = {} 

     # create our messages 
     message = "" 
     error = "" 

     todays_date = datetime.now() 
     print_date = todays_date.strftime("%A")  

     # now we can create the timesheet! 
     peach = TimeSheet(start_date=start_date_formatted, end_date=end_date_formatted, person_id=person) 
     # need an if valid.....? 
     peach.save() 
     message = "Created new timesheet" 

     response_data['startdate'] = start_date_print 
     response_data['enddate'] = end_date_print 
     response_data['status'] = peach.status 
     print response_data 

     context = { 
      "person": person, 
      "message": message, 
      "error": error, 
      "print_date": print_date, 
      "todays_date": todays_date, 
     } 

     return JsonResponse(response_data) 

を使用してオブジェクトを保存し、ここで私は...私はかどうかを確認するために長いバリデーション機能を持つように計画しています保存方法を記述しようとしてきたところである私の見解であります特定の日に日付が落ちますが、今はこれを動作させたいだけです。

class TimeSheet(models.Model): 

    O = "Open" 
    S = "Submitted" 
    A = "Approved" 
    R = "Needs review" 

    STATUS_CHOICES = (
    (O, "Open"), 
    (S, "Submitted"), 
    (A, "Approved"), 
    (R, "Needs Reviewing"), 
    ) 

    start_date = models.DateField() 
    end_date = models.DateField() 
    person_id = models.ForeignKey(Person) 
    status = models.CharField(max_length= 50, default="Open", choices=STATUS_CHOICES) 
    submitted_id = models.IntegerField(default=0) 
    approved_id = models.IntegerField(default=0) 
    submitted_date = models.DateTimeField(auto_now_add=True, blank=True) 
    approved_date = models.DateTimeField(auto_now_add=True, blank=True) 

    # def __str__(self): 
    # return self.id 

    def get_absolute_url(self): 
     return reverse('tande:timesheet', kwargs={'id': self.id}) 

    def __init__(self, *args, **kwargs): 
     print "initiating a timesheet" 
     super(TimeSheet, self).__init__(*args, **kwargs) 

    def save(self, *args, **kwargs): 
     print "something is trying to save!" 
     ok_to_continue = True 
     start_date = self.start_date 
     end_date = self.end_date 
     if ok_to_continue: 
      if end_date < start_date: 
       error = "Start date must be before end date" 
       ok_to_continue = False 
     if ok_to_continue: 
      super(TimeSheet, self).save(*args, **kwargs) 
     else: 
      print "def save did not work" 

ありがとうございます!

編集:フォームのidはAJAX呼び出しでIDと一致しませんでした

from django.conf.urls import url 

from . import views 

urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^people/$', views.people, name='people'), 
    url(r'^people/create_person/$', views.create_person, name='create_person'), 
    url(r'^(?P<person_id>[0-9]+)/person/$', views.person, name='person'), 
    url(r'^person/createtimesheet/$', views.createtimesheet, name='createtimesheet'), 

    url(r'^(?P<timesheet_id>[0-9]+)/person/timesheet/$', views.timesheet, name='timesheet'), 

] 
+0

ビューが実際にPOSTで呼び出されたことは確かですか?あなたは '作成タイムシート 'を見ますか? –

+0

いいえ作成タイムシートは表示されません。 Ajaxでデータを取得し、このビューに送信してページをリフレッシュしないようにしました。次に、Ajaxでビューを呼び出します。私はsaveメソッドを追加して以来、何もしなくなってしまいました... –

+0

ajaxコールを表示できますか? POSTメソッドが欠けている可能性が最も高いです。 –

答えて

0

... HTMLで

idがされています。ここでのAJAX呼び出しが

$(document).ready(function() { 

$('#timesheet-form').on('submit', function(event){ 
    event.preventDefault(); 
    console.log("add a timesheet"); 
    createtimesheet(); 
}); 

function createtimesheet() { 
    console.log("create timesheet is working!") 
    $.ajax({ 
     url : "{% url 'tande:createtimesheet' %}", 
     type: "POST", 
     data: { datestart : $('#start').val(), dateend : $('#end').val()}, 

     success : function(json) { 
      $('#start').val(''); 
      $('#end').val(''); 

      console.log(json); 
      var html = '<tr><td>'+json.startdate+'</td><td>'+json.enddate+'</td><td>'+json.status+'</td><</tr>'; 
      console.log("success"); 
      // $('div#talk').html(html); 
      $('#timesheet-list').append(html); 
      console.log(html) 
      overlay(); 
     }, 

     error : function(xhr,errmsg,err) { 
      // $('#results').html("<div class='alert-box alert radius' data-alert>Oops! We have encountered an error: "+errmsg+ 
      //  " <a href='#' class='close'>&times;</a></div>"); // add the error to the dom 
      console.log("uh oh"); 
      } 
     }); 
    }; 
}) 

のURLです'タイムシート形式を作成する'とAjaxは 'タイムシート形式'を呼び出していた

-.-

関連する問題