Django обновить или создать существующую строку в базе данных не работает - PullRequest
0 голосов
/ 01 февраля 2020

Я использую Django 3.0.2, база данных SQLite. Я создаю вес модели:

class Weight(models.Model):
    user = models.ForeignKey(User,
                             on_delete=models.CASCADE)

    date = models.DateField(auto_now_add=True)
    last_modified = models.DateTimeField(auto_now=True)
    weight = models.FloatField()

Моя цель - создавать строки на каждый день. Если я буду писать больше времени в день, будет обновляться только last_modified, а вес будет зависеть от user_id и даты.

Из командной строки я могу создать новую строку, но не могу ее обновить. Когда я пытаюсь это сделать:

Weight.objects.update_or_create(user_id=2, weight=123, date=date.today())
Weight.objects.update_or_create(user_id=2, weight=456, date=date.today())

Это создаст две строки:

1   2020-02-01 16:22:57.275688  123 2   2020-02-01
2   2020-02-01 16:23:02.925780  456 2   2020-02-01

Я ожидаю одну строку в выводе:

1   2020-02-01 16:22:57.275688  456 2   2020-02-01

Если я использую обновление вместо update_or_create , я могу обновить его.

Кто-нибудь может мне помочь объяснить, почему он не работает? Может быть, я что-то упустил, но не могу понять.

1 Ответ

1 голос
/ 01 февраля 2020

Вам необходимо указать со значениями по умолчанию, которые вы хотите обновить объект.

Weight.objects.update_or_create(user_id=2, date=date.today(),defaults={'weight':456})

...