1

模型.py

    class Bug(models.Model):
        title = models.CharField(max_length=200)
        creator = models.ForeignKey(User, on_delete=models.CASCADE, related_name="creator")
        lead = models.ForeignKey(User, default=None, blank=True, null=True, on_delete=models.SET_NULL, 
                                 related_name="lead")
        contributors = models.ManyToManyField(User, default=None, blank=True, null=True, 
                                              related_name="contributors")
        project = models.ForeignKey(Project, null=True, on_delete=models.CASCADE)
        created_at = models.DateTimeField(default=timezone.now)
        last_modified = models.DateTimeField(auto_now=True)
        status = models.ForeignKey(Status, on_delete=models.CASCADE, default=0)
        description = models.TextField()
    
        class Meta:
            constraints = [
                models.CheckConstraint(
                    check=(
                        models.Q(
                            abs(datetime.now().microsecond - created_at.microsecond) > 10
                        )
                    ),
                    name="%(app_label)s_%(class)s_exact_date",
                )
            ]

当我尝试对其运行测试时,出现以下错误: NameError: name 'created_at' is not defined

我试图强制执行一个约束,即created_at错误的日期要么恰好是它的创建时间,要么在它创建时间的某个严格范围内。我希望在数据库级别执行它,因为我试图保护数据不仅来自表单输入(在这种情况下,我可以添加一个验证器或在字段上添加 editable=false),而且还来自任何其他尝试通过 ORM 将不正确的数据保存到数据库中。我还使用约束而不是验证器,因为我不想重写多个函数(save()、update() 等)。

系统信息:Python v3.9.0、Django v3.1.4

4

0 回答 0