如果不存在,我可以创建一个创建对象的OneToOneField吗?

时间:2012-03-30 22:12:55

标签: django django-models

我正在使用看起来像这样的Django模型:

class Subscription(models.Model):
    user = models.OneToOneField(User)

也就是说,它与Django的User模块中的auth类具有一对一的关联。这种关联不是可选的;但是,由于一些遗留代码和一些手动修补数据库,有些情况下用户有相关的订阅,这意味着代码如下:

sub = user.subscription

会抛出DoesNotExist个异常。但是,大部分代码库都假定每个用户都有一个关联的Subscription对象。

有没有办法可以将OneToOneField子类化,如果数据库中不存在关联的Subscription对象,我将创建一个并在调用user.subscription时返回它,而不是抛出异常?

2 个答案:

答案 0 :(得分:1)

执行此操作的正确方法是捕获post_save信号,并在必要时创建对象。

答案 1 :(得分:0)

添加名为subscription的属性并在getter中创建必要的引用,因为您可能需要进行猴子修补,更好的选择

  1. 重构您的代码并添加实用程序函数以获取订阅
  2. 重构您的代码并为用户
  3. 添加proxy model
  4. 只需修复db一次