【问题标题】:Is there an easy way to ignore duplicates with django models unique=TRUE?有没有一种简单的方法可以忽略 django 模型 unique=TRUE 的重复项?
【发布时间】:2021-08-01 19:14:21
【问题描述】:
class Reddit_Submission(models.Model):
    submission_id = models.CharField(max_length=32, unique=True)
    submission_time_stamp = models.CharField(max_length=32)
    submission_title = models.CharField(max_length=32)
    submission_score = models.CharField(max_length=32)
    submission_author = models.CharField(max_length=32)
    submission_url = models.CharField(max_length=32)

我的 django 应用程序中的模型中有上述代码示例。我的问题是,如果数据库中已经存在重复的内容,是否有一种简单的方法可以忽略“Example = model.save()”?

谢谢

【问题讨论】:

    标签: python sql django


    【解决方案1】:

    这真的取决于您希望以上哪些字段是唯一的。在确定应该唯一的字段并将它们在模型上设置为“unique=True”后,您可以通过以下方式处理视图上的请求:

    def create(self, request):
         
    
        try:
            serializer = Reddit_Submission_Serializer(data=request.data)
            serializer.is_valid(raise_exception=True)
            serializer.save()
            
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        
        except:
            return Response(data={'message': "Duplicate field detected"}, status=status.HTTP_400_BAD_REQUEST)
    

    【讨论】:

      【解决方案2】:

      一种方法是捕获完整性错误并检查是否存在唯一约束消息并忽略它。如果没有,请再次加注:

      from django.db import IntegrityError
      
      try:
          model.save()
      except IntegrityError as e:
          if 'UNIQUE constraint' in str(e):
              pass
          raise
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-16
        • 1970-01-01
        • 1970-01-01
        • 2012-01-05
        • 1970-01-01
        • 2012-08-19
        • 1970-01-01
        • 2012-02-08
        相关资源
        最近更新 更多