在clean()期间不会出现

时间:2012-12-27 18:42:07

标签: django django-models

我的Django应用程序中有以下模型:

class Property(models.Model):
    ...various attributes...

class Booking(models.Model):
    property = models.ForeignKey(
        Property
    )
    ...more attributes...

我为clean()实施了Booking方法,该方法会检查Booking的各种约束。其中一些约束取决于BookingProperty的关联。出于这个原因,我在Booking的clean()方法中有以下内容:

if self.property is not None:
    ...Property related validations...

在管理应用程序中输入新的预订时,只需按“保存”按钮而不输入任何内容,就会在DoesNotExist exception上生成self.property is not None。我的理解是,丢失的关联应该由Django的单独字段验证捕获。

当我注释掉clean()方法时,上述情况并未发生,当我提交空白预订表单时,错过的关联被正确标记为错误。

我显然错过了一些东西但却一无所知......

1 个答案:

答案 0 :(得分:1)

作为答案发布,因为它是答案:

  

您是否尝试将条件更改为:

     

if hasattr(self, 'property') and self.property is not None

我不确定根本原因,因为我根据错误消息推断了解决方案。我想Django ORM可能会在保存时动态创建外键关联,因此即使它是必需属性,它还没有被创建,因为Booking实例是新的并且尚未保存。