2016-07-03 6 views
0

ジャンゴ1.9/Pythonの2.7ジャンゴ:日付フィールドは、モデル化するために保存されますが、このモデルを考える

を取得していない:

class CoursePurchase(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL) 
    course = models.ForeignKey(Course) 
    date_purchased = models.DateField(default=date.today()) 

私は、Djangoの管理者に入力した日付を格納するdate_purchased期待、そしてそれはありません、私のデータベースのブラウザに応じて:

Alt text

しかし、ビューでオブジェクトを取得すると、保存された日付の代わりに今日の日付を持って:

Alt text

は( __unicode__戻って今日の日付の代わりに格納されている日付のdate_purchasedフィールドに注意してください。ここで

は、私は、インスタンスを取得するために使用しているコードです:

cp = CoursePurchase(course=page.course, user=request.user) 

どこcourseuser期待値を返します。

私には何が欠けていますか?これはかなり簡単なようですが、私はこれを越えることはできません。保存上の現在の日付を設定するには

答えて

3

、ジャンゴDateFieldタイプに特別な引数を提供します。

Django documentation

datetime.dateインスタンスで、Pythonで表さ

class DateField(auto_now=False, auto_now_add=False, **options)

日、 。自動的に今すぐオブジェクトが保存されるたびにフィールドを設定し

DateField.auto_now

:いくつかの余分な、オプションの引数があります。 「最後に変更された」タイムスタンプに役立ちます。現在の日付は常に使用されることに注意してください。上書きできるのは単なるデフォルト値ではありません。

フィールドは、Model.save()を呼び出すときに自動的に更新されます。 QuerySet.update()などの他の方法で他のフィールドを更新するときにフィールドは更新されませんが、そのような更新でフィールドのカスタム値を指定できます。オブジェクトが最初に作成されたときDateField.auto_now_add

を自動的に設定します。タイムスタンプの作成に役立ちます。現在の日付は常に使用されることに注意してください。上書きできるのは単なるデフォルト値ではありません。したがって、オブジェクトの作成時にこのフィールドの値を設定しても、無視されます。このフィールドを変更できるようにしたい場合は、auto_now_add = Trueではなく、次のように設定します。

DateFieldの場合:default = date.today - datetime.date.today() DateTimeFieldの場合:default = timezone.now - from django.utils.timezone.now() このフィールドのデフォルトのフォームウィジェットはTextInputです。管理者は、JavaScriptカレンダーと「今日」のショートカットを追加します。追加のinvalid_dateエラーメッセージキーが含まれています。

オプションauto_now_add、auto_now、およびdefaultは相互に排他的です。これらのオプションを任意に組み合わせると、エラーが発生します。

しかし、これは問題の原因ではありません。これを行うと:あなたは、データベースから何かを取り出すのではなく、(だけ、どこにもまだ保存されていないメモリ内の)新しいインスタンスを作成していない

cp = CoursePurchase(course=page.course, user=request.user) 

。インスタンスを取得するには、query the database properly

cp = CoursePurchase.objects.get(course=page.course, user=request.user) 
+0

Ohありがとう、私はダムです。私は何かシンプルで不足していたと思っていたと思います。 –

関連する問題