【问题标题】:Django - What are the advantages and disadvantages of using unique_togueter vs. using a queryset in the view?Django - 在视图中使用 unique_togueter 与使用查询集的优缺点是什么?
【发布时间】:2019-12-04 17:25:10
【问题描述】:

假设我们有下一个模型:

class Publications(models.Model):
     author = ..........
     post = ..........

并且我们不希望在数据库中存储重复的记录。

这可以通过模型上的独特组合来完成:

 Meta:
    unique_together = (author, post)

或者它可以在视图中完成,例如:

register_exist = Publications.objects.filter(...).exists()
if register_exist == False:
     #Code to save the info

使用这些方法有什么优点或缺点?

【问题讨论】:

    标签: django django-models django-views


    【解决方案1】:
     Meta:
        unique_together = (author, post)
    

    数据库级别的约束。这使得无论何种视图输入数据,数据始终保持一致。

    但是另一个:

    register_exist = Publications.objects.filter(...).exists()
    if register_exist == False:
         #Code to save the info
    

    在应用程序级别进行限制。查询和检查记录是否存在可能会产生成本。并且当有人在没有这一步(偶然或意外)的情况下添加新记录时,应用程序之间的数据可能会不一致,这会使数据不再一致。

    【讨论】:

      【解决方案2】:

      简而言之,unique_together 属性创建一个UNIQUE constraint,而.filter(..) 用于根据给定条件过滤QuerySet

      换句话说,如果您在模型中应用了unique_together 功能,则即使您尝试这样做,也无法打破该约束(技术上可行,但是)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-03
        • 1970-01-01
        • 1970-01-01
        • 2019-08-10
        • 2017-07-26
        • 2011-05-04
        • 2010-09-08
        • 1970-01-01
        相关资源
        最近更新 更多