私のモデルに保存方法がありますが、これはフィールドの検証に使用します(前のビューでこれを行いましたが、面倒でした!私はフォームの検証でいくつかの困難を抱えていたので、フォームではなくオブジェクトを保存しています。保存メソッドがオブジェクトの保存時にトリガーされない
以前の保存メソッドは使用していませんでしたが、.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'),
]
ビューが実際にPOSTで呼び出されたことは確かですか?あなたは '作成タイムシート 'を見ますか? –
いいえ作成タイムシートは表示されません。 Ajaxでデータを取得し、このビューに送信してページをリフレッシュしないようにしました。次に、Ajaxでビューを呼び出します。私はsaveメソッドを追加して以来、何もしなくなってしまいました... –
ajaxコールを表示できますか? POSTメソッドが欠けている可能性が最も高いです。 –