Django强制OneToOneField的值属于ForiegnKey相关对象集

时间:2013-01-17 21:06:41

标签: python django

我的模型类似于以下内容:

class Submission(models.Model):
    round = models.ForeignKey('Round',related_name='submissions')
    text = models.TextField()

class Round(models.Model):
    favorite = models.OneToOneField('Submission',related_name='round_favorite+',null=True)

是否有任何内置方法可以在Round.submissions中强制执行Round.favorite?即:

assert(favorite in round.submissions.all())

如果没有,执行此断言的最佳方法是什么? pre_save信号?覆盖Model.save?

1 个答案:

答案 0 :(得分:1)

您应该覆盖Round模型的保存,以确保favorite提交存在,如果不保存。

如果您在Round不存在favorite时尝试保存Submission模型,则会抛出异常,最有可能是Submission.DoesNotExist。因此,您可以使用该例外进行保存并重试。