Я хочу создать объект с DateTime 0000-00-00 00:00:00
, поэтому, когда я проверяю даты в порядке ASC, сначала проверяются новые объекты.Как установить DateTimeField в ноль в Django?
ответ
Если значение даты 0000-00-00 00:00:00
не имеет значения, вы не должны использовать его как «специальное» значение. Вы должны использовать NULL вместо, например,
Однако, я не думаю, что было сказано в комментариях о NULL-выходит первый по умолчанию в восходящем то верно, потому что, давайте попробуем с моделью, как это:
class Log(Model):
timestamp = DateTimeField(null=True, default=None)
def __str__(self):
return str(self.timestamp)
я создал некоторые объекты этого класса:
In [21]: Log.objects.all()
Out[21]: [<Log: None>, <Log: 2015-12-28 12:33:17.464426>, <Log: 2015-12-28 12:35:52.313617>, <Log: None>]
Вышеупомянутые не сортируются, поэтому они выходят в их кардинальном порядке в базе данных.
Вот ASC сортировать:
In [22]: Log.objects.order_by('timestamp')
Out[22]: [<Log: 2015-12-28 12:33:17.464426>, <Log: 2015-12-28 12:35:52.313617>, <Log: None>, <Log: None>]
Так как вы можете видеть, Нуль- выходит последним в моей ASC рода. Я использую PostgreSQL для этого теста.
Вот DSC рода:
In [23]: Log.objects.order_by('-timestamp')
Out[23]: [<Log: None>, <Log: None>, <Log: 2015-12-28 12:35:52.313617>, <Log: 2015-12-28 12:33:17.464426>]
Однако вы можете использовать extra()
явно указать, как вы хотите отсортировать NULLs:
In [24]: Log.objects.extra(select={'timestamp_is_null': "timestamp is NULL"}, order_by=['-timestamp_is_null', 'timestamp'])
Out[24]: [<Log: None>, <Log: None>, <Log: 2015-12-28 12:33:17.464426>, <Log: 2015-12-28 12:35:52.313617>]
Вот более читаемым мой сниппет
Log.objects.extra(
select={'timestamp_is_null': "timestamp is NULL"},
order_by=['-timestamp_is_null', 'timestamp']
)
Версии для этого теста:
- PostgreSQL 9.4.5
- Джанго 1.8.4
Слова «вы должны использовать» велики. К сожалению, существует много устаревших систем, которые имеют схему с «0000-00-00». –
Для django 1.9
использовать следующие поля:
from django.db import models
class NullDateTimeField(models.DateTimeField):
def get_db_prep_value(self, value, connection, prepared=False):
# Casts datetimes into the format expected by the backend
if not prepared:
value = self.get_prep_value(value)
# Use zeroed datetime instead of NULL
if value is None:
return "0000-00-00 00:00:00"
else:
return connection.ops.adapt_datetimefield_value(value)
На основе DJANGO DateTimeField source.
- 1. Как скрутить datetimefield в django
- 2. django queryset filter datetimefield
- 3. RuntimeWarning: DateTimeField получил наивное datetime в django
- 4. django datetimefield Часовой пояс
- 5. Django: join on DateTimeField
- 6. Django IntegrityError с DateTimeField
- 7. Django get_object_or_404() с DateTimeField
- 8. Django DatetimeField формат сериализации
- 9. Формат Django datetimefield
- 10. Django DateTimeField input Форма
- 11. Timezones и DateTimeField - Django
- 12. django fixtures DateTimeField runtimeWarning
- 13. Изменение DateField на DateTimeField в Django
- 14. Редактирование DateTimeField django
- 15. Django DateTimeField в день час минута секунда
- 16. Ошибка Django при отправке в DateTimeField
- 17. редактирование Django DateTimeField в админ сайта
- 18. Разбор строки Datetime в Django DateTimeField
- 19. Истечение логики с DateTimeField в Django
- 20. Retrive часовой пояс известно DateTimeField в Django
- 21. Изменить DateTImeField на скрытый в django
- 22. DateTimeField не определена ошибка в django
- 23. DateTimeField не имеет datepicker в Django admin
- 24. Получить объект include DateTimeField в Django
- 25. Уникальная комбинация месяца/года в Django DateTimeField
- 26. Django db average of DateTimeField
- 27. Django: DateTimeField получил наивное datetime
- 28. Параметры django inspectdb для DateTimeField
- 29. Невозможно назначить None Django DateTimeField()
- 30. Как использовать Django DateTimeField по умолчанию
Почему вы не можете использовать значение null в базе данных? – GwynBleidD
@GwynBleidD Нулевы ли значения сначала в ASC? – User
Да, по умолчанию они на первом месте. – GwynBleidD