Django создает, но не обновляет объект с помощью метода get_or_create () - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть модель, которая выглядит следующим образом, и я пытаюсь обновить поле average_entry_price, но моя проблема в том, что не происходит обновления со значения 7.0 до 7074.0, хотя объект создан. Как видите, created возвращает False.

Нет сообщения об ошибке, и я думаю, что синтаксис правильный, так как я сначала пытаюсь сопоставить поля market и account, что, кажется, работает нормально, потому что объект создан правильно в начале, и затем я говорю Django обновить оставшееся поле average_entry_price. Я что-то здесь упускаю?

print(type(market))
print(type(a))
print('new value is', position['price'])
obj, created = Position.objects.get_or_create(
                market=market,
                account=a,
                defaults={
                    'average_entry_price': position['price']
                },
            )
print(obj.average_entry_price)
print(created)

Затем возвращается:

<class 'marketsdata.models.Market'>
<class 'trading.models.Account'>
new value is 7074.0
7.0
False

models.py

class Position(models.Model):
    account = models.ForeignKey(Account,
                                on_delete=models.CASCADE,
                                related_name='position',
                                null=True
                                )
    market = models.ForeignKey(Market,
                               on_delete=models.CASCADE,
                               related_name='position',
                               null=True
                               )

    average_entry_price = models.DecimalField(max_digits=8,
                                              decimal_places=1,
                                              null=True
                                              )

    class Meta:
        verbose_name_plural = "Positions"

    def __str__(self):
        return str(self.market)

1 Ответ

1 голос
/ 17 апреля 2020

Как указано в названии get_or_create не обновляется

Возвращает кортеж (объект, созданный), где объект - это извлеченный или созданный объект, а созданный объект - логическое значение, указывающее, является ли новый объект был создан.

вы, вероятно, хотите update_or_create

Возвращает кортеж (объект, созданный), где объект является созданным или Обновленный и созданный объект - это логическое значение, указывающее, был ли создан новый объект.

obj, created = Position.objects.update_or_create(
                market=market,
                account=a,
                defaults={
                    'average_entry_price': position['price']
                },
            )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...