В моей заявке на книгу у меня есть поле даты в модели, но в качестве входных данных из запроса REST иногда я получаю только год или даже полную дату, но в виде строкового формата. Сначала я хотел создать ручную форму для добавления книг, где я не знаю точную дату публикации, несмотря на год.
Итак, я пытаюсь получить год, добавив "01/01", и конвертировать в дату с ".strptime (s,"% Y-% m-% d " ).свидание()". Но это не работает, валидатор по умолчанию для поля даты не позволяет мне передавать что-либо еще, кроме ввода формата «гггг-мм-дд». Могу ли я как-то перезаписать defaultaotr по умолчанию или прекратить запуск его с помощью формы? Любое предложение, как решить эту проблему?
Модели:
class Book(models.Model):
title = models.CharField(max_length=100)
publication_date = models.DateField()
authors = models.ManyToManyField("Author", related_name="author")
ISBN = ISBNField() #validators=[book_unique_validator,]
pages = models.IntegerField(validators=[page_validator,], blank=True)
language = models.CharField(max_length=4)
def __str__(self):
return self.title
просмотров:
class BookAddView(FormView):
model = Book
template_name = "Books/create_book.html"
form_class = BookForm
success_url = reverse_lazy("book_list")
def form_valid(self, form):
if Book.objects.filter(ISBN=form.cleaned_data["ISBN"]).count() > 0:
messages.warning(self.request, f'Book "{form.cleaned_data["ISBN"]}" already exist in database.')
return redirect("book_details", pk=Book.objects.get(ISBN=form.cleaned_data["ISBN"]).pk)
else:
if len(publication_date=form.cleaned_data['publication_date']) == 4:
book_date = (form.cleaned_data['publication_date'] + "01/01").strptime(s, "%Y-%m-%d").date()
else:
book_date = publication_date=form.cleaned_data['publication_date']
new_book = Book(
title=form.cleaned_data["title"].lower(),
publication_date=book_date,
ISBN=form.cleaned_data["ISBN"],
pages=form.cleaned_data["pages"],
language=form.cleaned_data["language"]
)
authors = Author.objects.filter(pk__in=form.cleaned_data["authors"])
new_book.save()
for author in authors:
new_book.authors.add(author)
new_book.save()
pk = new_book.pk
return redirect("covers_add", pk=pk)
формы:
class BookForm(forms.ModelForm):
title = forms.CharField()
publication_date = forms.CharField()
authors = forms.ModelMultipleChoiceField(Author.objects.all())
ISBN = ISBNField()
pages = forms.IntegerField()
language = forms.CharField()
class Meta:
model = Book
fields = ["title", "publication_date", "authors", "ISBN", "pages", "language"]