django-orm : How to update one-to-one relation field value

非 Y 不嫁゛ 提交于 2019-12-08 03:11:51

问题


models.py

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)

I try two method , but both fail ,please guide me. thank you

# 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

The second method is weird.
areapoint.x_axis and areapoint.y_axis are really different after update. But in my database.It still the same .


回答1:


In both the approach, you are trying to update the Area object and not the AreaPoint object.

Here is how you could do it using both approaches:

1st Approach: using update method:

# 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)

Above will return an object of Area and since there are no fields areapoint__x_axis etc. it throws error.

What you could do is filter on AreaPoint instead and update it:

AreaPoint.objects.filter(area_id=304).update(x_axis=111, y_axis=222)

2nd Approach:

obj = Area.objects.get(id=304)
obj.areapoint.x_axis = 100
obj.areapoint.y_axis = 200 

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

3rd Approach:

areapoint = AreaPoint.objects.get(area_id=304)
areapoint.x_axis = 100
areapoint.y_axis = 200
areapoint.save()


来源:https://stackoverflow.com/questions/36637697/django-orm-how-to-update-one-to-one-relation-field-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!