2017-02-03 2 views
0

У меня есть метод сохранения на моей модели, который я бы хотел использовать для проверки полей (раньше я делал это в своих представлениях, но это было просто грязно!). Я сохраняю объект, а не форму, потому что у меня были некоторые трудности с проверкой формы.Сохранить метод не запускается на объекте save

Я раньше не использовал методы сохранения, но я предполагаю, что они срабатывают, когда вы используете команду .save()? Моя не запускается вообще ... Также из того, что я понимаю, метод clean() запускается для форм, когда вы используете is_valid(), поэтому для меня это не полезно?

Вот мое мнение, что сохраняет объект с помощью 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" 

Спасибо!

Edit: здесь Аякс позвонить

$(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-адрес:

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. Поскольку я добавил метод сохранения, он прекратил делать что-нибудь ... –

+0

Можете ли вы показать нам вызов ajax? Скорее всего, отсутствует метод POST. –

ответ

0

форма Идентификатор не соответствует ид в вызове Ajax ...

идентификатора в HTML является «create-timesheet-form» и ajax вызывал «расписание-форму»

-.-

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