首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-orm :如何更新一对一关系字段值

django-orm :如何更新一对一关系字段值
EN

Stack Overflow用户
提问于 2016-04-15 03:20:32
回答 1查看 9.7K关注 0票数 2

models.py

代码语言:javascript
复制
class Area(models.Model):
    area_name = models.CharField(max_length=255, null=False, blank=False)
    description = models.TextField(null=False, blank=False)

class AreaPoint(models.Model):
    x_axis = models.FloatField(default=0.0)
    y_axis = models.FloatField(default=0.0)
    area = models.OneToOneField(Area,primary_key=True,on_delete=models.CASCADE)

我尝试了两种方法,但都失败了,请指导我。谢谢

代码语言:javascript
复制
# first method : 
# Area.objects.filter(id=304).update(area_name="today is 1", description="today is 1", areapoint__x_axis=111,areapoint__y_axis=222)
# error : Area has no field named 'areapoint__y_axis'

# second method : 
obj = Area.objects.get(id=304)
print obj.areapoint.x_axis # 277
print obj.areapoint.y_axis # 65
obj.areapoint.x_axis = 100
obj.areapoint.y_axis = 200
print obj.areapoint.x_axis # 100
print obj.areapoint.y_axis # 200
obj.save()
print obj.areapoint.x_axis # 100
print obj.areapoint.y_axis # 200

第二种方法很奇怪。

areapoint.x_axisareapoint.y_axis在更新后确实是不同的。但是在我的database.It里还是一样的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-15 04:02:02

在这两种方法中,您都试图更新Area对象,而不是AreaPoint对象。

下面是使用这两种方法的方法:

第一种方法:使用update方法:

代码语言:javascript
复制
# here is what you are doing:
Area.objects.filter(id=304).update(area_name="today is 1",
                                   description="today is 1",
                                   areapoint__x_axis=111,
                                   areapoint__y_axis=222)

上面将返回Area的一个对象,由于没有字段、areapoint__x_axis等,它会抛出错误。

您可以做的是对AreaPoint进行过滤,然后更新它:

代码语言:javascript
复制
AreaPoint.objects.filter(area_id=304).update(x_axis=111, y_axis=222)

第二种方法:

代码语言:javascript
复制
obj = Area.objects.get(id=304)
obj.areapoint.x_axis = 100
obj.areapoint.y_axis = 200 

# save obj.areapoint instead
obj.areapoint.save()

第三种方法:

代码语言:javascript
复制
areapoint = AreaPoint.objects.get(area_id=304)
areapoint.x_axis = 100
areapoint.y_axis = 200
areapoint.save()
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36637697

复制
相关文章

相似问题

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