Django- обновите запись модели DateField, чтобы она была строкой по умолчанию

#python #django #django-models #django-views

#python #django #django-модели #django-представления

Вопрос:

У меня есть функция в моей модели Django: def add_default_date эта функция, если она вызывается из представления, проверяет, есть ли publish_date None она, и если она есть, я бы хотел изменить publish_date ее на текст : "Date Needed" . Однако прямо сейчас, когда я это делаю, я получаю сообщение об ошибке : "'Date Needed' value has an invalid date format. It must be in YYYY-MM-DD format." . Похоже, что я пытаюсь присвоить строку a DateField , но она не работает. Есть ли способ сделать это?

Models.py:

 class Byte(models.Model):
"""Model for databyte content."""

   publish_date = models.DateField(blank=True, null=True)


   def add_default_date(self):
       if self.publish_date is None:
           self.publish_date = "Date Needed"
 

Views.py:

 bytes = Byte.objects.order_by(
        F('publish_date').desc(nulls_last=True)
    )

for b in bytes:
    Byte.add_default_date(b)
    b.save()
 

Комментарии:

1. Возможно, это может вам помочь (преобразовать string string в datetime) programiz.com/python-programming/datetime/strptime

2. почему вы думаете о сохранении в базе данных чего-то вроде следующей строки, DateField преобразуется в соответствующий тип данных базы данных для хранения дат, и он все равно не подходит для хранения строк. Вы всегда можете изменить представление в своем представлении / сериализаторе

Ответ №1:

Одно из решений — вообще не использовать поле даты. Используйте символьное поле и при создании / сохранении объектов модели преобразуйте дату в строку. Но вы не сможете использовать встроенные механизмы сортировки и фильтрации Django.

Схематичным решением было бы использовать очень старую дату по умолчанию. Затем в вашей функции жестко запрограммируйте, чтобы эта дата игнорировалась в любом процессе, который вы выполняете.

Наконец, вы можете сохранить ее как нулевую дату и в своем шаблоне использовать тег {$ empty %}, чтобы указать, что показывать, если дата равна нулю. Вы могли бы показать «Необходимую дату» на странице html, она просто будет сохранена как null.