【发布时间】:2020-06-04 12:44:57
【问题描述】:
在我的书应用程序中,我在模型中有一个日期字段,但作为 REST 请求的输入,有时我得到的只是一年,甚至是完整的日期,但它是一个字符串格式。我想首先创建一个手动表单来添加我不知道确切出版日期的书籍,尽管一年。
所以我想要做的是在只有一年的情况下添加“01/01”并转换为日期 ".strptime(s, "%Y-%m-%d").date()"。但这不起作用,日期字段默认验证器阻止我传递除“yyyy-mm-dd”格式输入之外的任何内容。我可以以某种方式覆盖默认的验证或停止通过表单启动它吗?有什么建议可以解决这个问题吗?
型号:
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"]
【问题讨论】: