Введите действительную дату. в поле BC/AD в фреймворке django
В фреймворке Django с PostgreSql мне нужно хранить дату BC.
Итак, вот код, который я использую:
class BCEDateField(models.DateField):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def from_db_value(self, value, expression, connection):
if value:
if value.endswith('BC'):
# Parse the BC date string and convert it to a negative year
year, month, day = map(int, value[:-2].split('-'))
return models.DateField().from_string(f"{-year:04d}-{month:02d}-{day:02d}")
else:
# Parse the CE date string directly
return models.DateField().from_string(value)
return value
def to_python(self, value):
if isinstance(value, str):
if value.endswith('BC'):
# Parse the BC date string and convert it to a negative year
year, month, day = map(int, value[:-2].split('-'))
return models.DateField().from_string(f"{-year:04d}-{month:02d}-{day:02d}")
else:
# Parse the CE date string directly
return models.DateField().from_string(value)
return value
def get_prep_value(self, value):
if value:
if value.year <= 0:
# Convert the negative year to a BC date string
year, month, day = value.year * -1, value.month, value.day
return f"{year:04d}-{month:02d}-{day:02d}BC"
else:
# Convert the CE date to a string
return value.strftime("%Y-%m-%d")
return value
НО ВЫДАЕТ ОШИБКУ:
Введите действительную дату.