Запрос на обновление элемента, созданный django, неверен

Я пытаюсь обновлять по одному элементу за раз, используя Django ORM с TimescaleDB в качестве базы данных.

У меня есть гипертаблица timesacle, определяемая следующей моделью:

class RecordTimeSeries(models.Model):

    # NOTE: We have removed the primary key (unique constraint) manually, since we don't want an id column
    timestamp = models.DateTimeField(primary_key=True)
    location = PointField(srid=settings.SRID, null=True)
    station = models.ForeignKey(Station, on_delete=models.CASCADE)
    # This is a ForeignKey and not an OneToOneField because of [this](https://stackoverflow.com/questions/61205063/error-cannot-create-a-unique-index-without-the-column-date-time-used-in-part)
    record = models.ForeignKey(Record, null=True, on_delete=models.CASCADE)
    temperature_celsius = models.FloatField(null=True)

    class Meta:
        unique_together = (
            "timestamp",
            "station",
            "record",
        )

Когда я обновляю элемент, используя save():

record_time_series = models.RecordTimeSeries.objects.get(
    record=record,
    timestamp=record.timestamp,
    station=record.station,
)

record_time_series.location=record.location
record_time_series.temperature_celsius=temperature_celsius
record_time_series.save()

Я получаю следующую ошибку:

psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "5_69_db_recordtimeseries_timestamp_station_id_rec_0c66b9ab_uniq"
DETAIL:  Key ("timestamp", station_id, record_id)=(2022-05-25 09:15:00+00, 2, 2) already exists.

и я вижу, что запрос, который использовал django, следующий:

{'sql': 'UPDATE "db_recordtimeseries" SET "location" = NULL, "station_id" = 2, "record_id" = 2, "temperature_celsius" = 26.0 WHERE "db_recordtimeseries"."timestamp" = \'2022-05-25T09:15:00\'::timestamp', 'time': '0.007'}

С другой стороны, обновление проходит успешно с update():

record_time_series = models.RecordTimeSeries.objects.filter(
    record=record,
    timestamp=record.timestamp,
    station=record.station,
)
record_time_series.update(
    location=record.location,
    temperature_celsius=temperature_celsius,
)

а sql, используемый django, таков:

{'sql': 'UPDATE "db_recordtimeseries" SET "location" = NULL, "temperature_celsius" = 25.0 WHERE ("db_recordtimeseries"."record_id" = 2 AND "db_recordtimeseries"."station_id" = 2 AND "db_recordtimeseries"."timestamp" = \'2022-05-25T09:15:00\'::timestamp)', 'time': '0.012'}

Очевидно, что первый запрос неверен, потому что в нем нет правильных параметров в пункте WHERE, но почему django не включает эти параметры, ведь timestamp не является уникальным ключом, и как это можно исправить?

Я думаю, что ошибка была вызвана из-за foregn_key:

Первым:

< < <

Аналогично ON DELETE существует также ON UPDATE, который вызывается, когда ссылающийся столбец изменяется (обновляется). Возможные действия такие же одинаковые. В данном случае, CASCADE означает, что обновленные значения должны быть скопированы в ссылающуюся строку(и).

Второй:

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