Django - Проблема с переопределением сохранения для обновления полей
У меня возникли проблемы с поиском способа обновления полей таблицы через переопределение метода сохранения, чтобы обновленное значение учитывало значения из предыдущих сохраненных объектов, имеющих один и тот же первичный ключ.
Позвольте мне объяснить:
У меня есть две таблицы, таблица A и таблица B. Таблица A имеет поле, которое является внешним ключом PK таблицы B. Несколько объектов в таблице B имеют один и тот же первичный ключ из таблицы A. Вот некоторые тела JSON для представления каждой таблицы.
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
}
]
Допустим, мы отправим все значения, представляющие таблицу A, в одном POST-запросе. В то же время, я хочу, чтобы таблица B была обновлена количеством кошек или собак через переопределение метода сохранения таблицы A.
Прямо сейчас я делаю это таким образом в модели таблицы A, которая действительно обновляет поле count, как я и хотел, но, похоже, не запоминает предыдущие итерации, хотя она выполняет этот метод, насколько я могу судить (через печать в консоли), для каждой строки в таблице A.
def save(self, *args, **kwargs):
try:
super(TableA, self).save()
animal_count = self.count
animal_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,
)
Итак, если бы мы предположили, что таблица B в приведенном выше теле JSON была текущим состоянием таблицы, и я отправил сообщение в таблицу A, мы бы получили счетчик 2 для кошек и 0 для собак в таблице B. Вместо этого мы получили счетчик 1 для кошек и 0 для собак
Итак, мои вопросы: есть ли способ заставить работать то, что я хочу сделать здесь? Может быть, проблема в том, что сохранение для каждого объекта не происходит до тех пор, пока не завершится весь процесс POST, и таким образом запоминается только последняя итерация? Что-то еще?
Благодарю за любую помощь, спасибо.
Проблема оказалась в том, что после присвоения экземпляра animal_count он сохраняется в памяти. В последующих экземплярах при обращении к этому объекту всегда указывается его первоначальное значение, а не обновленное значение, которое было сохранено в БД в предыдущем экземпляре.
Поместив animal_count.refresh_from_db() ниже animal_count = self.count, мы решаем проблему, заставляя этот объект обновляться, чтобы соответствовать новой версии в базе данных.