簡體   English   中英

Django:驗證外鍵之間的關系

[英]Django: Validate relationships among ForeignKeys

我有一個帶有兩個ForeignKey的 model Runsignupreport

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 = ... 

指向模型,而模型又與另一個 model 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時,我想確保它的signupreport是針對同一個Training的,即report.training == signup.training

這種驗證叫什么? 我將如何實現它?

另外,我很高興學習其他方法來實現這一點,如果另一種數據庫結構會更好的話。

以下是描述模型驗證過程的文檔

請注意,這種驗證通常只發生在 ModelForms 中(調用ModelForms form.is_valid()時)。 如果您不調用model_instance.full_clean()方法,則手動創建 object 並使用save()不會觸發此驗證。 它針對的是用戶,而不是開發人員。

根據提到的文檔,我的建議是使用clean方法:

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")

    def clean(self):
        if self.signup.training != self.report.training:
            # Note: adding an error code is best practice :)
            raise ValidationError('some message', code='some_error_code')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM