我使用了inlineformset,views方法如下:
@login_required
def patron_edit_phone(request, *args, **kwargs):
patron = request.user
PhoneNumberFormSet = inlineformset_factory(Patron, PhoneNumber, extra=1, exclude="kind",can_order=True)
if request.method == "POST":
formset = PhoneNumberFormSet(request.POST, request.FILES, instance=patron)
if formset.is_valid():
formset.save()
messages.success(request, _(u"Votre information de numéro de téléphone a bien été mise à jour"))
else:
formset = PhoneNumberFormSet(instance=patron)
return direct_to_template(request, 'accounts/patron_phone_edit.html', extra_context={'formset': formset, 'patron': patron })
我已经成功测试了inlineformset的“post”方法。这是代码。
def test_patron_phone_edit(self):
self.client.login(username='alex.wg@e.com', password='alex')
response = self.client.post(reverse('patron_edit_phone'), {
'phones-TOTAL_FORMS': u'1',
'phones-INITIAL_FORMS': u'',
'phones-MAX_NUM_FORMS': u'',
'phones-0-id' : '1',
'phones-0-patron' : '1',
'phones-0-number' : "11111111",
'phones-0-DELETE' : u''
})
self.assertEquals(response.status_code, 200)
patron = Patron.objects.get(email='alex.wg@e.com')
for phone in patron.phones.all():
if phone.id == 1:
self.assertEquals(phone.number, "11111111")
else:
pass
我使用get方法尝试了以下内容:
def test_patron_phone_get_form(self):
self.client.login(usernamer='alex.wg@e.com', password='alex')
response = self.client.get(reverse('patron_edit_phone'))
self.assertEquals(response.status_code, 200)
但这不起作用。我没有获得status_code = 200,而是获得status_code = 302。为什么?也许我需要指定GET方法的总形式?
非常感谢任何帮助!谢谢!
如果需要更多信息,请发表评论,然后我会粘贴所需的信息。
答案 0 :(得分:3)
您在登录功能中输入了拼写错误。 usernamer应该是用户名。您正在获得302重定向,并将您发送到登录页面。