2

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

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

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

我实现了检查 a 的各种约束的clean()方法。许多这些限制取决于关联和存在。出于这个原因,我在 clean() 方法中有以下内容:BookingBookingBookingPropertyBooking

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

在管理应用程序中输入一个新的预订并且只按保存按钮而不输入任何内容,这会生成一个DoesNotExist exceptionon self.property is not None。据我了解,缺少的关联应该由 Django 的单个字段验证来捕获。

当我注释掉上述clean()方法时,上述方法不会发生,并且当我提交空白预订表格时,缺失的关联会被正确标记为错误。

我显然错过了一些东西,但不知道是什么......

4

1 回答 1

1

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

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

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

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

于 2012-12-27T23:32:50.823 回答