假设我有这些模型:
class Space(models.Model):
item = models.OneToOneField(Item, null=True, on_delete=models.CASCADE)
class Item(models.model):
...
一个空间可以包含一个项目,但它也可以是空的。另一方面,每个项目都必须有一个空间。它不可能存在于虚空中。
我可以在我的Item模型中创建一个field.space(null=False),但是这样一来,Space.container就不能为空(在创建/查询它们时会引发RelatedObjectDoesNotExist
异常)。
处理这些异常很麻烦。我宁愿让Space.container返回None(就像我当前的设置一样)。
是否有一种简单的方法可以使Item模型中的.space成为强制性的,而不是相反?
1条答案
按热度按时间gojuced71#
我觉得这会让人觉得很古怪。因为这种情况的默认情况是处理异常。Here您的
Space
是Place
,您的Item
是Restaurant
。我建议使用建议的策略:给予
Item
一个强制的OneToOne_Field
,称为space
。然后,而不是错误处理去与链接的例子显示的替代方案:你也可以使用hasattr来避免异常捕获:
我对其他答案很感兴趣!
转念一想:
还可以通过属性实现错误处理或上面显示的处理。
老实说,我从来没有尝试过,但为什么这不工作?
告诉我进展如何!