TypeError:int()参数必须是字符串或数字,而不是Django中的“AnonymousUser”

时间:2012-02-12 23:26:08

标签: django typeerror

我一直在测试我的应用程序并遇到错误,似乎与应用程序本身没有任何关系。我有这样的单元测试:

class TagSaveAndLoadTest(TestCase):
    fixtures = ['users.json']

    def setUp(self):
        self.client = Client()
        self.client.login(user='test_user', password='123')

    def test_register_save(self):  
        tag_dict = {
                        'sex' : 4,
                        'drugs' : 3,
                        'rocknroll' : 1,
                    }
        response = self.client.post('/register/save_tags/', {'skilltags' : json.dumps(tag_dict)})
        self.assertEqual(response.status_code, 200)

我得到的错误是:TypeError: int() argument must be a string or a number, not 'AnonymousUser'。回溯中出现的文件是base.pymanages.pyquery.py等。似乎我的请求卡在中间件的某个地方,我不知道如何处理它。如果请求不能达到我的视野甚至控制器怎么可能呢?如果'setUp()'函数在测试用户中记录测试用户,为什么AnonymousUser会出现问题?

预先感谢here完整追溯!

2 个答案:

答案 0 :(得分:5)

尽量不要被追溯过于恐吓。如果你在所有Django内部都看得很高,你需要的信息就在那里。请求到达您的视图,问题不在中间件中。看起来client.login调用不起作用。以下过滤器语句失败,因为request.user是一个匿名用户

Skill.objects.filter(user=request.user).delete()

尝试在测试中打印client.login行。如果成功登录用户,它将返回True。如果这不起作用,请检查:

  1. 您使用的是正确的用户名和密码。
  2. 您正在成功加载用户灯具。你有正确的文件名吗? Django约定是没有s的user.json。
  3. 确保您的测试类为Django TestCase类创建子类,以便加载灯具。

答案 1 :(得分:3)

问题在于这行代码:

File "E:\ev\site\project\..\project\jobs\views.py", line 69, in post
  Skill.objects.filter(user=request.user).delete()

您正在将用户对象作为ORM中列条件的值传递。这不是你的观点吗?