首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django -更新模型对象

Django -更新模型对象
EN

Stack Overflow用户
提问于 2014-04-18 00:14:00
回答 1查看 1K关注 0票数 0

我没有找到我的案例的简单答案,所以我在这里

以下是我的模型的简化:

代码语言:javascript
复制
class People(models.Model):
    identifier = models.CharField(max_length=255, primary_key = True)
    name = models.CharField(max_length=255)
    house = model.ForeignKey(House)
    salary = model.IntegerField()

class House(models.Model):
    id = models.CharField(max_length=255, primary_key = True)
    color = models.CharField(max_length=255)

我的需求是更新一个人的信息。例如,假设约翰有一大笔收入,他能负担得起把房子粉刷成紫色而不是黄色。我希望能够做到以下几点:

代码语言:javascript
复制
 john = People.objects.get(identifier="john")
 john.salary = 10000
 john.house.color = "purple"
 john.house.save()
 john.save()

我想知道Django做这样的事情的方式是什么。现在,我收到了一些错误,比如

代码语言:javascript
复制
john.save()
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 546, in save
force_update=force_update, update_fields=update_fields)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 650, in save_base
result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 215, in _insert
return insert_query(self.model, objs, fields, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 1661, in insert_query
return query.get_compiler(using=using).execute_sql(return_id)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 937, in execute_sql
cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/util.py", line 41, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/postgresql_psycopg2/base.py", line 56, in execute
six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2])
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/postgresql_psycopg2/base.py", line 54, in execute
return self.cursor.execute(query, args)
IntegrityError: duplicate key value violates unique constraint "people_pkey"
DETAIL:  Key (identifier)=("John") already exists.

当我用一个save(force_update)替换save()时,有时我会得到一个

代码语言:javascript
复制
DatabaseError: Forced update did not affect any rows.

我读到了一些关于以下方法的内容:

代码语言:javascript
复制
john = People.objects.filter(identifier="john").update(salary=10000)

但这并没有真正的帮助,因为我还需要更新外键,而不仅仅是People对象。你怎么做?

EN

回答 1

Stack Overflow用户

发布于 2014-04-18 00:37:24

这似乎是因为您手动/意外地为People表中的'identifier‘字段指定了主索引。如果您使用的是phpmyadmin,请转到您的表,并确保标识符不是主键。您可以通过转到relations视图来删除主索引。

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

https://stackoverflow.com/questions/23138334

复制
相关文章

相似问题

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