Django не может сохранить значение FloatField равным 0.0

У меня есть метод в модели, который обновляет значение до 0.0 и вызывает save(). Проблема в том, что save() никогда не сохраняет значение, если оно равно 0.

Вот код:

class Item(models.Model):
    stock_quantity = models.FloatField(
        null=True, blank=True, validators=[MinValueValidator(0)]
    )

    class Meta:
        abstract = True
        ordering = ["-id"]

    def mark_as_finished(self) -> None:
        self.stock_quantity = 0.0
        self.save()

У меня есть подмодель, которая расширяет эту модель.

class Instance(Item):
    expiration_date = models.DateField(null=True, blank=True)

Теперь в представлении вызывается mark_as_finished():

@action(detail=True, methods=["patch"], url_name="mark-as-finished")
def mark_as_finished(self, request: Request, pk: int) -> Response:
    pi_instance = get_object_or_404(Instance, id=pk)
    pi_instance.mark_as_finished()
    pi_instance.refresh_from_db()
    return Response(
        data=self.serializer_class(pi_instance).data,
        status=HTTP_200_OK,
    )

После выполнения теста стоимость акций никогда не становится равной 0.

def test_mark_as_finished(self):
    pink_ins = self.create_sample_instance()
    self.assertNotEqual(pink_ins.stock_quantity, 0)
    url: str = reverse(self.mark_finished_url, kwargs={"pk": pink_ins.id})
    res: HttpResponse = self.client.patch(url)
    self.assertEqual(res.status_code, 200)
    self.assertEqual(res.data["stock_quantity"], 0)

self.assertEqual(res.data["stock_quantity"], 0) AssertionError: 10.5 != 0

Я отлаживаю программу и вижу, что после выполнения сохранения значение не сохраняется. Если я помещаю значение 0.1, то оно сохраняется. То есть фактически не сохраняется значение 0 в поле float. Я даже убрал MinimumValueValidator, но все равно 0 значение не сохраняется.

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