2016-11-03 9 views
1

私のモデルには次のようなフィールドがあります。Django IntegrityError with DateTimeField

view_time = ArrayField(
    models.DateTimeField(auto_now_add=True)) 

が、私はエラーを取得:

django.db.utils.IntegrityError: null value in column "view_time"violates not-null constraint 
DETAIL: Failing row contains (18, 0, null, null, null). 

エラーは、私は新しいオブジェクトを作成しようとする場合に生じる、および値を追加します。

recent_views = UserRecentViews.objects.create() 
    recent_views.add_view(product.article) 

私はジャンゴ1.8.8とPython 3.5を使用します。 2

データベースの時間をリセットしますが、それは役に立たないので、dbはPostgresです。

私はオブジェクト作成の問題を思いますか?しかし、なぜdjangoは現在のdatetimeでオブジェクトを作成できないのですか? auto_now_add =これのためにTrueが追加されました。

私の質問は、djangoで自動生成日時フィールドを追加する方法ですか?

+0

あなたは 'ArrayField'に[defaultを](https://docs.djangoproject.com/en/1.10/ref/contrib/postgres/fields/)引数を追加しようとしたことがありますか? –

+0

はい、試してみます。効果はありません。 – Lem

答えて

0

まず、データベースが不完全に正規化されているように見えます。通常、列または配列型でカンマ区切り値を使用することは、そのことを示す良い例です。

次に。

Tip: Arrays are not sets; searching for specific array elements can be a sign of database misdesign. Consider using a separate table with a row for each item that would be an array element. This will be easier to search, and is likely to scale better for a large number of elements.

Arraysにあなたに十分なロープを与えるだけのPostgreSQLの方法です...

あなたの最善の策は、本当にあなたのデータベースを正規化することです。あなたの劣ったオプションは、以下のジャンゴを行うときにまったくDateTimeField型のオブジェクトを作成する理由がないためですそれ

view_time = ArrayField(
    models.DateTimeField(auto_now_add=True), blank=True, null=True) 

=空白真、ヌル=真を設定することです。

recent_views = UserRecentViews.objects.create() 

したがって、配列フィールドをnullに設定するだけで、これは許可されません。あなたがするように指示されていないため、

ああ

but why django can not create object with current datetime

より具体的にします。

+0

は、今私は、この操作を行います。 'view_time = ArrayField( models.DateTimeField(_( '最近の見解')、デフォルト= timezone.now)、空白= Trueの場合、ヌル=真)' 今、これ以上のエラーを、 view_timeフィールドは空です。 – Lem

+0

はい、そうでなければなりません。 – e4c5

+0

OK、このフィールドに自動生成された現在の日時を記入する方法を教えてください。 – Lem

関連する問題