我的Django应用程序中有以下模型:
class Property(models.Model):
...various attributes...
class Booking(models.Model):
property = models.ForeignKey(
Property
)
...more attributes...
我为clean()
实施了Booking
方法,该方法会检查Booking
的各种约束。其中一些约束取决于Booking
和Property
的关联。出于这个原因,我在Booking
的clean()方法中有以下内容:
if self.property is not None:
...Property related validations...
在管理应用程序中输入新的预订时,只需按“保存”按钮而不输入任何内容,就会在DoesNotExist exception
上生成self.property is not None
。我的理解是,丢失的关联应该由Django的单独字段验证捕获。
当我注释掉clean()
方法时,上述情况并未发生,当我提交空白预订表单时,错过的关联被正确标记为错误。
我显然错过了一些东西但却一无所知......
答案 0 :(得分:1)
作为答案发布,因为它是答案:
您是否尝试将条件更改为:
if hasattr(self, 'property') and self.property is not None
我不确定根本原因,因为我根据错误消息推断了解决方案。我想Django ORM可能会在保存时动态创建外键关联,因此即使它是必需属性,它还没有被创建,因为Booking实例是新的并且尚未保存。