当前位置: 首页 > 面试题库 >

添加自定义Django模型验证

荆亦
2023-03-14
问题内容

我有一个带有开始和结束日期范围的Django模型。我想强制执行验证,以便没有两个记录具有重叠的日期范围。最简单的实现方式是什么,这样我就不必重复编写逻辑了?

例如,我不想在Form aModelForm 以及 admin表单中重新实现此逻辑, 并且 模型被重写save()

据我所知,Django在全球范围内强制执行这些类型的条件并不容易。

Googling并不是很有帮助,因为“模型验证”通常是指验证特定的模型字段,而不是验证整个模型内容或字段之间的关系。


问题答案:

我发现有用的基本模式是放入所有自定义验证clean(),然后从内部简单地调用full_clean()(调用clean()和其他一些方法)save(),例如:

class BaseModel(models.Model):

    def clean(self, *args, **kwargs):
        # add custom validation here
        super(BaseModel, self).clean(*args, **kwargs)

    def save(self, *args, **kwargs):
        self.full_clean()
        super(BaseModel, self).save(*args, **kwargs)

如此处所述,默认情况下未完成此操作,因为它会干扰某些功能,但这对我的应用程序来说不是问题。



 类似资料:
  • 问题内容: 我在管理站点中注册了一个模型。它的字段之一是长字符串表达式。我想将自定义表单字段添加到管理中此模型的添加/更新页面,基于这些字段值,我将构建长字符串表达式并将其保存在相关的模型字段中。 我怎样才能做到这一点? 更新:基本上我正在做的是从符号中构建数学表达式或字符串表达式,用户选择符号(这些是自定义字段,不属于模型的一部分),然后单击“保存”,然后从符号列表并将其存储在数据库中。我不希望

  • 我最近开始修改Minecraft了,我想我的第一个发布的mod可能会给机翼提供Terraria的功能(在一段有限的时间内保持飞行的空间,然后在你接触地面之前你就不能飞起来了。这时机翼提供了一个缓慢的下落)。 到目前为止,我已经添加了项目,食谱等,我已经决定使用,我有我的第一套翅膀作为盔甲,然而,因为我没有设置纹理,他们显示为粉红色/黑色格子。我真正想要的是使用一个不同的模型--我为机翼定制的一个模

  • 我创建了一个Django表单: 在模型中,定义为 如果用户为宽度输入0,则Django在表单验证时返回的错误消息为 确保该值大于或等于0.05。 因此,它很好地包含了来自的值。我想把它改为“相对宽度必须是” 为了实现这一点,我尝试在addFaceForm Meta中自定义错误 但这意味着要硬编码0.05的值。我想从模型定义中读一下。如何做到这一点?

  • 如果您是一位经验丰富的ML开发人员,而且ML Kit的预训练的模型不能满足您的需求,您可以通过ML Kit使用定 的TensorFlow Lite模型。 使用Firebase托管您的TensorFlow Lite模型或将其与您的应用程序打包在一起。然后,使用ML Kit SDK来使用您的自定义模型的最佳版本构建应用。如果您使用Firebase托管您的模型,ML Kit会自动更新您的用户的所用版本。

  • 问题内容: 我希望能够在加载Laravel / Eloquent模型时为其添加自定义属性/属性,类似于使用RedBean的 方法可以实现的那样。 例如,目前,在我的控制器中,我有: 能够省略循环并已经设置并填充了“ available”属性将是很好的选择。 我尝试使用文档中描述的一些模型事件在对象加载时附加此属性,但到目前为止还没有成功。 笔记: “可用”不是基础表中的字段。 是作为JSON对象作

  • Enforce模块用于验证数据。对于使用以前的验证器的用户,还可以继续使用,它们中的一部分整合到了enforce,剩余部分还没有。推荐你开始使用orm.enforce来取代orm.validators。可用的验证器的列表请见node-enforce。 unique验证器也构建于ORM中,可以这样来访问: name: orm.enforce.unique("name already taken!")