检查非空字段是否为null
我想写一些这样的代码:
class SomeModel(models.Model):
field = models.ForeignKey(SomeOtherModel)
def __init__(self, *args, **kwargs):
super(SomeModel, self).__init__(*args, **kwargs)
if self.field is None:
self.field = SomeOtherModel()
...
但是这会引发一个错误:self.field.rel.to.DoesNotExist
。Django的代码对此是非常明确的:
class ReverseSingleRelatedObjectDescriptor(object):
def __get__(self, instance, instance_type=None):
...
if val is None:
# If NULL is an allowed value, return it.
if self.field.null:
return None
raise self.field.rel.to.DoesNotExist
一个明显的解决办法是把这个字段设置为可为空,不过据我了解,这样做会影响数据库的结构。而且我还挺喜欢Django提供的完整性检查。另一个办法是捕获这个错误并妥善处理,但这样会增加很多重复的代码。特别是当有多个这样的字段时(每个字段都要写一个单独的try...except
块——这看起来就很糟糕)。我该怎么办呢?
我可以使用initial
,但在处理外键时,这个方法相对有限。我并不总是知道在创建时想要的默认值是什么。不过在初始化阶段我会知道。此外,这个默认值可能还会依赖于其他字段的值。
2 个回答
0
在表单中正确引用一个字段的方法是这样的:
self.fields['myfield']
所以,在你的情况下,检查这个字段是否为空应该这样写:
self.fields['myfield'].value is None
另外,尽量不要用像'field'这样的保留字或者接近保留字的词来命名你的字段。
10
检查它是否设置了这个属性 -
if hasattr(self, 'field')