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'),) # 联合唯一,当任一元组参数中所有字段都相同时无法添加




  • 相关阅读:
    【C#进阶系列】06 类型和成员基础
    纪中5日T1 1564. 旅游
    纪中17日T1 2321. 方程
    纪中17日T2 2322. capacitor
    纪中10日T1 2313. 动态仙人掌
    纪中14日听课小结 图论 最短路 二分图 差分约束
    一个抓猫的游戏 消遣GAME 持续更新中!
    洛谷P1464 Function  HDU P1579 Function Run Fun
    洛谷P1976 鸡蛋饼
    纪中12日T1 2307. 选择
  • 原文地址:https://www.cnblogs.com/Xingtxx/p/10482892.html
Copyright © 2011-2022 走看看