2009-06-18 59 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是否支持或可能改变未来? – 2009-06-18 18:25:21

+0

任何名称以下划线开头的东西都应该被认为是内部的。无论如何,它在1.0和1.1之间没有变化。 – zgoda 2009-06-18 20:41:02

3

你不能从属性本身得到它,你必须通过model._meta下的模型选项去。

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