2011-05-10 16 views
6

私はdjango開発の初心者です。その後、私は管理ページで新しい「A」の要素を作成しようとしている、そしてそれのために整合素子Bを作成していた場合django 'DateTimeField'にデフォルト値エラーがありません

class A(models.Model):   
    name = models.CharField(max_length=200)  

    def __unicode__(self): 
     self.name 


class B(models.Model): 
    a = models.ForeignKey(A) 
    name = models.CharField(max_length=200) 
    mydate = models.DateTimeField('party date') 

と:私はそれに割り当てられた複数のクラスBを持っている可能性があるクラスAを作成していますsave()を打つとき、私はメッセージこれを取得しています、その後、クラスAに、要素を私は「MyDateに該当する」に移動した場合 がフィールド「MyDateに該当」のデフォルト値

を持っていない:save()は、私は警告を取得していますフィールドはDjangoからが必要です、フィールドを埋めるために私に必要です!

日付フィールドがBの一部である場合に、この必須メッセージを表示するにはどうすればよいですか。

おかげ

+0

にUSE_TZに基づいてDateTimeオブジェクトを返します。あなたはここで良い答えを詳細を追加する必要があります。どのようにして "一致する要素B"を作成していますか? 'post'save'シグナルの一部として' A'の 'save'メソッドでやっているのですか、それとも' B'の管理者の追加/変更ページに行き、そこからやっていますか?どちらの方法に応じて、あなたの質問に対する答えは大きく違うかもしれません。 –

+0

はい、私はこれをA element save()を通してやろうとしていました!私はpost_saveが何であるかわかりませんが、私はそれが各Bのために呼び出されていると仮定します。 – sramij

答えて

12

あなたが指定していない場合は、あなたのフィールドがオプションであることを、あなたはそれのためにあなたがオブジェクトを作成するたびに価値を提供する必要があります。あなたのケースでは、あなたがそれらのいずれかを実行する必要がありますすることはできません。ここで

をオプションのフィールドを作成する方法である:ここでは

class B(models.Model): 
    a = models.ForeignKey(A) 
    name = models.CharField(max_length=200) 
    mydate = models.DateTimeField('party date', blank=True, null=True) 

を使用すると、デフォルト値を設定する方法である:

import datetime 

class B(models.Model): 
    a = models.ForeignKey(A) 
    name = models.CharField(max_length=200) 
    mydate = models.DateTimeField('party date', default=datetime.datetime.now) 
+0

と一緒に保存します。それを動作させるためにsqlitに移動しなければなりませんでした!あなたが提案したことを – sramij

+0

@sramijに任せて、DBエンジンを変更する必要はなく、単にsuncdbを使ってデータベースを作り直さなければなりませんでした。 –

0

私の理解から、djangoはモデルAの検証を試み、検証エラーを返します。 Aは検証するので、Bは検証しないので失敗するAを書き込もうとします。私はこれを優雅に行う方法を理解していませんが、Aを検証する前にフォームBを独自に評価しようとすると、「このフィールドは必須です」というメッセージが表示され、ユーザーに表示できます。

4

ユーティリティ関数この関数はDjangoの

from django.utils import timezone 
class B(models.Model): 
    a = models.ForeignKey(A) 
    name = models.CharField(max_length=200) 
    mydate = models.DateTimeField('party date', default=timezone.now) 

にありますが、あなたのsettings.py

def now(): 
    """ 
    Returns an aware or naive datetime.datetime, depending on settings.USE_TZ. 
    """ 
    if settings.USE_TZ: 
     # timeit shows that datetime.now(tz=utc) is 24% slower 
     return datetime.utcnow().replace(tzinfo=utc) 
    else: 
     return datetime.now() 
関連する問題