我有一个Run
模型,其中有两个ForeignKey
,signup
和report
,
class Run(models.Model):
signup = models.ForeignKey(Signup, on_delete=models.CASCADE, related_name="runs")
report = models.ForeignKey(Report, on_delete=models.CASCADE, related_name="runs")
kind = ...
指向模型,该模型又与另一个模型,Training
,
class Report(models.Model):
training = models.OneToOneField(
Training, on_delete=models.CASCADE, primary_key=True
)
cash_at_start = ....
class Signup(models.Model):
training = models.ForeignKey(
Training, on_delete=models.CASCADE, related_name="signups"
)
participant = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="signups"
)
在创建Run
时,我希望确保signup
和report
用于相同的Training
,即report.training == signup.training
。
这种验证叫什么?我该如何实现它?
此外,如果另一种数据库结构会更好,我很乐意学习其他实现方法。
1条答案
按热度按时间fbcarpbf1#
以下是描述模型验证过程的文档。
请注意,此验证通常只在
ModelForms
(调用form.is_valid()
时)时发生。如果不调用model_instance.full_clean()
方法,则手动创建对象并使用save()
不会触发此验证。它针对的是用户,而不是开发人员。根据上面提到的文档,我的建议是使用
clean
方法: