zoukankan      html  css  js  c++  java
  • django 模型 unique together 示例

    unique_together

      一起使用的字段名称集必须是唯一的:

     unique_together = (("driver", "restaurant"),)

      这是元组的元组,在一起考虑时必须是唯一的。它在Django管理员中使用,并在数据库级别强制执行(即,UNIQUE语句中包含相应 语句)。CREATE TABLE

      为方便起见,在处理单个字段集时,unique_together可以是单个元组:

      unique_together = ("driver", "restaurant")

      

      A ManyToManyField不能包含在unique_together中。(目前尚不清楚这甚至意味着什么!)如果您需要验证与a相关的唯一性ManyToManyField,请尝试使用信号或显式through模型。

      在ValidationError当约束被违反了模型验证过程中提出的unique_together错误代码。

      官方文档部分介绍

    一般作用于:

      设置字段唯一,但是有事一种组合形式的,并且不重复。

      保存用户为唯一和课程,但是一个用户有多个课程,所以采用这种方式保存。

      这个元数据是非常重要的一个!它等同于数据库的联合约束!

      举个例子,假设有一张用户表,保存有用户的姓名、出生日期、性别和籍贯等等信息。要求是所有的用户唯一不重复,可现在有好几个叫“张伟”的,如何区别它们呢?(不要和我说主键唯一,这里讨论的不是这个问题)

      我们可以设置不能有两个用户在同一个地方同一时刻出生并且都叫“张伟”,使用这种联合约束,保证数据库能不能重复添加用户(也不要和我谈小概率问题)。在Django的模型中,如何实现这种约束呢?

      使用unique_together,也就是联合唯一!

      比如:

      unique_together = (('name', 'birth_day', 'address'),)
    

      这样,哪怕有两个在同一天出生的张伟,但他们的籍贯不同,也就是两个不同的用户。一旦三者都相同,则会被Django拒绝创建。这一元数据经常被用在admin后台,并且强制应用于数据库层面。

      unique_together接收一个二维的元组((xx,xx,xx,...),(),(),()...),每一个元素都是一个元组,表示一组联合唯一约束,可以同时设置多组约束。为了方便,对于只有一组约束的情况下,可以简单地使用一维元素,例如:

      unique_together = ('name', 'birth_day', 'address')
    

      联合唯一无法作用于普通的多对多字段。

      unique_together = (('username', 'password',),( 'age','date'),) # 联合唯一,当任一元组参数中所有字段都相同时无法添加




  • 相关阅读:
    截除数值,分别获取数据与单位
    angularjs判断对象值是否存在
    angularjs文件上传实例
    获取Zxing.net 中所有barcodeformat
    创建QR CODE
    QR Code的容错级别
    验证QR Code版本
    Web API返回自定义数据给客户端
    理解Hive 不同组件的功能
    tcpdf中文解决方案
  • 原文地址:https://www.cnblogs.com/Xingtxx/p/10482892.html
Copyright © 2011-2022 走看看