Django,如何在调用super()后更新save()方法中的模型?

too*_*rus 1 python django overriding save django-models

我有这样的问题.例如,我的模型类中有一个字段:

periodic_task = models.OneToOneField(PeriodicTask, null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

我需要覆盖save()方法来设置此字段值:

def save(self, *args, **kwargs):
    super(PostTweetSet, self).save(*args, **kwargs)
    self.periodic_task = TaskScheduler.create(
        'tweets.tasks.post_next_tweet', self.interval.period,
        self.interval.every, args="[" + '"%s"' % str(self.pk) + "]")
Run Code Online (Sandbox Code Playgroud)

您会看到self.periodic_task在实际调用super()方法后分配.我这样做了,因为需要有一个pk字段(我在TaskSchedulercreate方法中使用它).另一方面,我需要在设置此新字段后更新此模型的db-table.如果我super()再次打电话,我会收到有关重复ID的错误.那么,我该怎么做才能使这个工作?或者我需要重建我的方法来完成这项任务?谢谢.

小智 5

我会用保存后的信号来做.

如果你不能或那个没有吸引力的话,你会将你的需求视为两条路径:

  • 如果你不是主键,你需要先保存它并获得pk
  • 如果您已经知道主键,则可以创建定期任务,然后调用super

所以像(伪代码):

def save(...):
    if self.pk is None:
        super(...)
        self.save(...)    # Call ourselves -- but this time, we'll have a primary key!
    else:
        ... create your periodic task
        super(...)
Run Code Online (Sandbox Code Playgroud)