Функция ожидает 2 аргумента, когда должен только один - PullRequest
0 голосов
/ 08 июля 2010

У меня есть функция friend_exists, подобная этой:

def friend_exists(request, pid):
    result = False
    try:
        user = Friend.objects.get(pid=pid)
    except Friend.DoesNotExist:
        pass  
    if user:
        result = True

    return result

Я вызываю ее из моей другой функции, например:

exists = friend_exists(form.cleaned_data['pid'])

где pid = u'12345678'.Почему я получаю:

Exception Type: TypeError at /user/register/
Exception Value: friend_exists() takes exactly 2 arguments (1 given)

Есть идеи?

Ответы [ 3 ]

5 голосов
/ 08 июля 2010

Почему вы думаете, что это должно быть только один? У вас явно есть два аргумента в определении функции:

def friend_exists(request, pid):

Тут же говорится, что ожидает request и pid.

2 голосов
/ 08 июля 2010

Требуется два аргумента, а вы указываете только один, значение form.cleaned_data ['pid'] Если это значение на самом деле является кортежем / списком двух аргументов, вы хотите расширить его звездочкой, например:

exists = friend_exists(*form.cleaned_data['pid'])

Более чистым подходом в этом случае может быть:

request, pid = form.cleaned_data['pid']
exists = friend_exists(request, pid)
1 голос
/ 08 июля 2010

Это похоже на django, поэтому способ правильного вызова вашей функции будет friend_exists(request, form.cleaned_data['pid'].Когда вызывается функция представления, запрос заполняется автоматически, поэтому может показаться, что это должно происходить при каждом вызове в приложении django, но, поскольку вы вызываете функцию вручную, вам придется вручную передать ей объект request.

...