Я храню предметы аукциона, и мое приложение успешно работает в браузере. Это означает, что все созданные мной предметы аукциона отображаются с правильными датами начала и окончания. И эти даты начала и окончания хранятся как DateTimeFields
, и то, что сохраняется, это объект даты и времени, использующий datetime.now()
, который включает в себя микросекунды. Как в:
2020-01-20 14:06:22.398123
В консоли python я запускаю следующее:
from auctionitem.models import AuctionItem
AuctionItems.objects.all()
Я получаю неприятную ошибку о недопустимой десятичной операции:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Users\Sir Chris Mazzochi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\query.py", line 252, in __repr__
data = list(self[:REPR_OUTPUT_SIZE + 1])
File "C:\Users\Sir Chris Mazzochi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\query.py", line 258, in __len__
self._fetch_all()
File "C:\Users\Sir Chris Mazzochi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\query.py", line 1261, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "C:\Users\Sir Chris Mazzochi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\query.py", line 74, in __iter__
for row in compiler.results_iter(results):
File "C:\Users\Sir Chris Mazzochi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\sql\compiler.py", line 1081, in apply_converters
value = converter(value, expression, connection)
File "C:\Users\Sir Chris Mazzochi\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\backends\sqlite3\operations.py", line 286, in converter
return create_decimal(value).quantize(quantize_value, context=expression.output_field.context)
decimal.InvalidOperation: [<class 'decimal.InvalidOperation'>]
model.py (для AuctionItem)
from django.db import models
from django.contrib.auth.models import User
from PIL import Image
import datetime
print("Running for Mazzo")
class AuctionItem(models.Model):
seller = models.ForeignKey(User, on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg', upload_to='auction_items')
title = models.CharField(max_length=100)
description = models.TextField()
startBid = models.DecimalField(max_digits=6, decimal_places=2)
buyNowPrice = models.DecimalField(max_digits=6, decimal_places=2)
buyNowEnabled = models.BooleanField()
deliveryCost = models.DecimalField(max_digits=6, decimal_places=2)
now = datetime.datetime.now()
now_no_micro = now.replace(microsecond=0)
startDate = models.DateTimeField(default=now_no_micro)
tdelta = datetime.timedelta(days=7)
enDate = now_no_micro + tdelta
endDate =models.DateTimeField(default=enDate)
viewCount=models.IntegerField(default=0)
def __str__(self):
return self.title
def save(self):
super().save()
img = Image.open(self.image.path)
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size)
img.save(self.image.path)
def incrementViewCount(self):
print('Hi Chris Mazzochi')
self.viewCount = self.viewCount + 1
self.save()
Мне интересно, является ли десятичная дробь, на которую ссылается эта ошибка, равна той в этом объекте datetime с микросекундами, к которым добавлена точка ','. ', ... это здесь, где моя ошибка? Нужно ли хранить дату без микросекунд?
Спасибо, Ironman