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, мы решаем проблему, заставляя этот объект обновляться, чтобы соответствовать новой версии в базе данных.

Вернуться на верх