use*_*364 1 python django django-orm
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)
Run Code Online (Sandbox Code Playgroud)
我尝试了两种方法,但都失败了,请指导我.谢谢
# 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
Run Code Online (Sandbox Code Playgroud)
第二种方法很奇怪.
areapoint.x_axis并且areapoint.y_axis在更新后真的不同.但在我的数据库中.它仍然是一样的.
在这两种方法中,您都尝试更新Area对象而不是AreaPoint对象.
以下是使用这两种方法的方法:
第一种方法:使用update方法:
# 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)
Run Code Online (Sandbox Code Playgroud)
上面将返回一个对象,Area因为没有字段areapoint__x_axis等,它会抛出错误.
您可以做的是过滤AreaPoint而是更新它:
AreaPoint.objects.filter(area_id=304).update(x_axis=111, y_axis=222)
Run Code Online (Sandbox Code Playgroud)
第二种方法:
obj = Area.objects.get(id=304)
obj.areapoint.x_axis = 100
obj.areapoint.y_axis = 200
# save obj.areapoint instead
obj.areapoint.save()
Run Code Online (Sandbox Code Playgroud)
第三种方法:
areapoint = AreaPoint.objects.get(area_id=304)
areapoint.x_axis = 100
areapoint.y_axis = 200
areapoint.save()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3503 次 |
| 最近记录: |