微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

实际错误:['选择一个有效的选择该选择不是可用的选择之一']尝试测试表单时

如何解决实际错误:['选择一个有效的选择该选择不是可用的选择之一']尝试测试表单时

我正在尝试测试表单在成功发布后是否会重定向,但出现此错误

(实际错误:['选择一个有效的选项。该选项不是可用选项之一。'])

模型.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 举报,一经查实,本站将立刻删除。