Django - 保存覆盖以更新字段问题
Django - Save override to update fields issue
无法找到一种方法来更新 table 的字段,方法是通过覆盖保存方法并使更新的值因子包含在共享相同主键的先前保存的对象的值中。
让我解释一下:
我有两个table,tableA和tableB。TableA有一个字段是table的外键PK B. table B 中的多个对象共享来自 Table A 的相同主键。这里有一些 JSON 实体来表示每个 table.
Table A
[
{
"pk": 1
"count(fk)": "Cat counter",
"name" "Jerry"
},
{
"pk": 2
"count(fk)": "Cat counter",
"name" "Max"
},
{
...
}
]
[ Table B
{
"pk": "Cat counter"
"count": 0
},
{
"pk": "Dog counter"
"Count": 0
}
]
假设我们 POST 在一个 POST 请求中表示 Table A 的所有值。同时,我希望通过 Table A.Table A.
的保存方法覆盖,用猫或狗的数量更新 table B
现在我在 Table A 的模型中这样做,它确实按照我的意愿更新了计数字段,但它似乎不记得以前的迭代,即使它是 运行 据我所知(通过打印到控制台)对于 Table A.
中的每一行
def save(self, *args, **kwargs):
try:
super(TableA, self).save()
animal_count = self.count
animal_count.count = animal_count.count + 1
animal_count.save(update_fields=['count'])
except Exception as e
"blah blah" % str(e),
status=status.HTTP_400_BAD_REQUEST,
)
所以如果我们假设上面 JSON 正文中的 table B 是 table 的当前状态,并且我发布到 table A,在 table B 中,猫的计数为 2,狗的计数为 0。相反,猫的计数为 1,狗的计数为 0。
所以我的问题是,有没有办法让我想在这里做的事情起作用?在整个 POST 过程完成之前,每个对象的保存是否存在一些问题,因此可能只记得最后一次迭代?还有别的吗?
感谢任何帮助,谢谢。
原来的问题是,一旦您分配 animal_count 的实例,它就会存储在内存中。在后续实例中,当引用此对象时,它始终是它的原始值,而不是在先前实例中保存到数据库中的更新值。
通过将 animal_count.refresh_from_db() 放在 animal_count = self.count 下面,我们的问题通过强制更新对象以匹配数据库中的新版本来解决。
无法找到一种方法来更新 table 的字段,方法是通过覆盖保存方法并使更新的值因子包含在共享相同主键的先前保存的对象的值中。
让我解释一下:
我有两个table,tableA和tableB。TableA有一个字段是table的外键PK B. table B 中的多个对象共享来自 Table A 的相同主键。这里有一些 JSON 实体来表示每个 table.
Table A
[
{
"pk": 1
"count(fk)": "Cat counter",
"name" "Jerry"
},
{
"pk": 2
"count(fk)": "Cat counter",
"name" "Max"
},
{
...
}
]
[ Table B
{
"pk": "Cat counter"
"count": 0
},
{
"pk": "Dog counter"
"Count": 0
}
]
假设我们 POST 在一个 POST 请求中表示 Table A 的所有值。同时,我希望通过 Table A.Table A.
的保存方法覆盖,用猫或狗的数量更新 table B现在我在 Table A 的模型中这样做,它确实按照我的意愿更新了计数字段,但它似乎不记得以前的迭代,即使它是 运行 据我所知(通过打印到控制台)对于 Table A.
中的每一行def save(self, *args, **kwargs):
try:
super(TableA, self).save()
animal_count = self.count
animal_count.count = animal_count.count + 1
animal_count.save(update_fields=['count'])
except Exception as e
"blah blah" % str(e),
status=status.HTTP_400_BAD_REQUEST,
)
所以如果我们假设上面 JSON 正文中的 table B 是 table 的当前状态,并且我发布到 table A,在 table B 中,猫的计数为 2,狗的计数为 0。相反,猫的计数为 1,狗的计数为 0。
所以我的问题是,有没有办法让我想在这里做的事情起作用?在整个 POST 过程完成之前,每个对象的保存是否存在一些问题,因此可能只记得最后一次迭代?还有别的吗?
感谢任何帮助,谢谢。
原来的问题是,一旦您分配 animal_count 的实例,它就会存储在内存中。在后续实例中,当引用此对象时,它始终是它的原始值,而不是在先前实例中保存到数据库中的更新值。
通过将 animal_count.refresh_from_db() 放在 animal_count = self.count 下面,我们的问题通过强制更新对象以匹配数据库中的新版本来解决。