首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更新记录时的IntegrityError

更新记录时的IntegrityError
EN

Stack Overflow用户
提问于 2018-01-08 14:30:55
回答 1查看 1K关注 0票数 1

我有一个以双列作为主键的模型。我对它做了一个过滤器,得到我想要的记录,改变一个字段并保存它。如我所知,保存将更新记录,不会在db中创建模型的新实例。所以一切都会好起来的,但是当我试图保存记录的时候,我被困在了integrityError Duplicate entry '10-2' for key 'PRIMARY'

下面是代码片段:

代码语言:javascript
运行
复制
analysis = AnalysisResult.objects.filter(request=req.request_id)
for anal in analysis:
    anal.analysisresult_path = some_string
    anal.save() #this line is where the error occurs

这是我的模型:

代码语言:javascript
运行
复制
class AnalysisResult(models.Model):

    analysisresult_path = models.CharField(db_column='analysisResult_path', max_length=255, blank=True,
                                       null=True)  # Field name made lowercase.
    detectionresult_path = models.CharField(db_column='detectionResult_path', max_length=255, blank=True,
                                        null=True)  # Field name made lowercase.
    targetcode = models.ForeignKey('TagetCode', models.DO_NOTHING,
                               db_column='targetCode_id')  # Field name made lowercase.
    request = models.ForeignKey('Request', models.DO_NOTHING, primary_key=True)


    class Meta:
        managed = False
        db_table = 'analysis_result'
        unique_together = (('request', 'targetcode'),)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-08 18:43:03

啊,是的,欢迎来到一个姜戈氏 最强烈的意见:所有的表/模型都应该有一个可以用于更新的主键字段。如果没有,则必须为更新编写原始SQL,因为save将假定在where子句中有一个名为id的隐式主键字段。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48152379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档