2009-06-18 14 views
0

モデルのプロパティの値がデフォルト値であるかどうかをどのように知ることができますか。例Django:プロパティがデフォルト値であるかどうかを確認

class Alias(models.Model) : 
    image = models.ImageField(upload_to='alias', default='/media/alias-default.png') 

a = Alias.get("123") 
# this doesn't work 
if a.image == a.image.default : 
    pass 
# nor this 
if a.image == Alias.image.default : 
    pass 

については

私は、ドキュメントに掘ってみましたが、何も表示されませんでした。

答えて

2

Djangoのdefaultは、SQLのデフォルトと同じではありません。管理者が新しいオブジェクト作成時にフォームフィールドを自動入力するためだけにあります。

defaultとして定義された値と何かを比較する場合は、別の場所(つまりsettings.py)に定義する必要があります。同様:

class MyModel(models.Model): 
    ... 
    my_field = models.IntegerField(default=settings.INT_DEFAULT) 

default値はMyModel._meta._fields()[field_creation_index].defaultに保存されているが、これは内部で掘っていることに注意してくださいされています。

+0

_metaはサポートされていますか、または今後変更される可能性がありますか? –

+0

名前がアンダースコアで始まるものはすべて内部のものとみなしてください。とにかく、それは1.0と1.1の間で変わらなかった。 – zgoda

+0

内部属性(_metaは内部APIに対してかなり安定しています)を使用する場合は、作成インデックスでアクセスするのではなく、MyModel._meta.get_field( 'field_name')。defaultを読みやすくなります。 –

3

プロパティ自体からは取得できません。model._metaのモデルオプションを経由しなければなりません。

a._meta.get_field_by_name('image')[0].get_default() 
+0

これはサポートされているのでしょうか、あるいは今後変更される可能性がありますか? –

関連する問題