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 значение не сохраняется.