如何解决实际错误:['选择一个有效的选择该选择不是可用的选择之一']尝试测试表单时
(实际错误:['选择一个有效的选项。该选项不是可用选项之一。'])
模型.py
class BookInstance(models.Model):
"""Model representing a specific copy of a book (i.e that can be borrowed from
the library)."""
id = models.UUIDField(
primary_key = True,default = uuid.uuid4,help_text = 'Unique ID for this particular book across whole library'
)
book = models.ForeignKey('Book',on_delete = models.RESTRICT,null = False,blank = False)
imprint = models.CharField(max_length=200)
due_back = models.DateField(null = True,blank = True)
LOAN_STATUS = (
('m','Maintenance'),('o','On loan'),('a','Available'),('r','Reserved'),)
status = models.CharField(
max_length=1,choices=LOAN_STATUS,blank='True',default='m',help_text = 'Book availability'
)
borrower = models.ForeignKey(
User,on_delete = models.SET_NULL,null = True,blank = True)
@property
def is_overdue(self):
if self.due_back and date.today() > self.due_back:
return True
return False
class Meta:
"""order queries according to due back dates"""
ordering = ['due_back']
permissions = (
("can_mark_returned","set book as returned"),)
def __str__(self):
"""String for representing the Model object."""
""" representes it as 'id.title-status'"""
return f"{self.id}({self.book.title})-{self.status}"
view.py
def renew_book_librarian(request,pk):
book_instance = get_object_or_404(BookInstance,pk = pk)
if request.method == 'POST':
form = RenewBookModelForm(request.POST)
if form.is_valid():
book_instance.due_back = form.cleaned_data['due_back']
book_instance.borrower = form.cleaned_data['borrower']
book_instance.save()
return HttpResponseRedirect(reverse('borrowed-books'))
else:
proposed_due_back = datetime.date.today() + datetime.timedelta(weeks=3)
default_borrower = book_instance.borrower
form = RenewBookModelForm(initial = {'due_back': proposed_due_back,'borrower': default_borrower})
context = {
'form': form,'book_instance': book_instance,}
return render(request,'catalog/book_renew_librarian.html',context)
form.py
class RenewBookModelForm(ModelForm):
def clean_due_back(self):
data = self.cleaned_data['due_back']
if data < datetime.date.today():
raise ValidationError(_('Invalid date - renewal in past'))
if data > (datetime.date.today() + datetime.timedelta(weeks=4)):
raise ValidationError(_('Invalid date - renewal more than 4 weeks'))
return data
class Meta:
model = BookInstance
fields = ['borrower','due_back']
labels = {'due_back': _('New renewal date'),'borrower': _('Borrower')}
help_texts = {
'due_back': _('Enter a date between Now and 4 weeks (default 3).'),'borrower': _('Enter a borrower (default is prevIoUs borrower).')
}
def __init__(self,*args,**kwargs):
super(RenewBookModelForm,self).__init__(*args,**kwargs)
self.fields['borrower'].required=True
test_view.py
def test_redirects_to_all_borrowed_book_list_on_success(self):
login = self.client.login(username='testUser2',password='testPass2')
valid_date_in_future=datetime.date.today() + datetime.timedelta(weeks=2)
test_user = User.objects.get(pk=1)
response = self.client.post(
reverse('renew-book-librarian',kwargs={'pk':self.test_bookinstance1.pk}),{'due_back':valid_date_in_future,'borrower': test_user}
)
self.assertFormError(response,'form','borrower','')
# print(response)
# self.assertRedirects(response,reverse('borrowed-books'))
错误:
FAIL: test_redirects_to_all_borrowed_book_list_on_success (catalog.tests.test_view.RenewBookInstanceViewTest)
回溯(最近一次调用最后一次): 文件“C:\Users\thesk\Desktop\python\Django Projects\mdn\locallibrary\catalog\tests\test_view.py”,第 283 行,在 test_redirects_to_all_borrowed_book_list_on_success self.assertFormError(response,'') 文件“C:\Users\thesk\Desktop\python\Django Projects\mdn\venv\lib\site-packages\django\test\testcases.py”,第 510 行,assertFormError self.assertTrue( AssertionError: False is not true : 上下文 0 中表单 'form' 上的字段 'borrower' 不包含错误 ''(实际错误:['选择一个有效的选择。该选择不是可用的选择之一。'] )
在 1.520 秒内运行 1 次测试
失败(失败=1) 正在销毁别名“default”的测试数据库...
有什么想法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。