Как сделать поля даты в моделях не обязательными, используя в html тип ввода=дата

#django #django-models #datefield

#django #django-модели #поле даты

Вопрос:

Это то, что у меня есть:

models.py

 class Comic(models.Model):

title = models.CharField(max_length=255, blank=False)
date_of_purchase = models.DateField(blank=True, null=True)
  

views.py

 def add_to_my_collection(request):
    if request.method == 'POST':
        comic = Comic.objects.create(
            title = request.POST['title'].capitalize(), 
            date_of_purchase = request.POST['date_of_purchase'] 
        )
  

file.html

 <form class="create_edit" action="/add_to_my_collection" method="POST" enctype="multipart/form-data">
     {% csrf_token %}
          <div class="form-group">
              <label for="title">Title:</label>
              <input name="title" type="text" class="form-control" id="title" value="{{comic.title}}">
          </div>

          <div class="form-group">
              <label for="date_of_purchase">Date of purchase:</label>
              <input name="date_of_purchase" type="date" id="date_of_purchase" class="form-control"/>
          </div> 

          <div class="sub_but">
              <button type="submit" class="btn btn-primary btn-block">Submit</button>
          </div>
</form> 
  

Как вы можете видеть в моделях, поле даты может быть пустым. Но если я запускаю его без заполнения поля даты, я получаю сообщение об ошибке:

django.core.exceptions.Ошибка проверки: [«» значение имеет недопустимый формат даты. Это должно быть в формате ГГГГ-ММ-ДД «.]

Как я могу это исправить?

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

1. в теге ввода даты я сомневаюсь, что / by the closing > помогает. если ни это, ни ответ Cesar17 не помогают, то, возможно, для целей тестирования попробуйте включить formnovalidate во входной тег, чтобы увидеть, присутствует ли ошибка проверки в реализации, а не во входных данных.

Ответ №1:

Если вам не нужно добавлять дату, когда она была впервые создана, то вы должны указать, что это не требуется с помощью «auto_now_add=False». Пожалуйста, рассмотрите возможность чтения источника:

models.py

 date_of_purchase = models.DateField(blank=True, null=True,auto_now_add=False)
  

Источник
https://docs.djangoproject.com/en/2.1/ref/models/fields/#datetimefield