Как получить INT или STR из VAR с функцией return? - PullRequest
0 голосов
/ 09 апреля 2019

Я получаю идентификатор пользователя, и мне нужно это в формате INT, но я получаю только с функцией return.Как конфертировать из функции в INT?Я использую Django 2.1.7 и python 3.7.

from django.contrib.auth import authenticate
from django.http import HttpRequest
request=HttpRequest
username='myuser'
password='mypass'
user = authenticate(username=username, password=password)

def user_id(request):
    UID = request.user
    return(UID)

UID=user_id
print(type(UID))
<class 'function'>
print(UID)
<function user_id at 0x106cd9158>
print(user.id)
19 


views.py:
def get_userid(request):
    if User.is_authenticated:
        UID = request.user.id 
        return (UID)
    if User.is_anonymous:
        UID = 14
        return (UID)
def opsearch(request):
    item = request.POST['item']
    dic = MLRun(item)
    return render(request, 'main/layout/results.html', {'dictionary': dic})

мой код, который вызывает шаблон:

def to_DB(item, dic):
    UID = get_userid
    date_started = (timezone.now())
    item_searched = item

    Q = OPQuery(date_started=date_started, 
        item_searched=item_searched, id_user=UID)
    Q.save()
    QID = Q.id
    QUID = OPQuery.objects.get(id=QID)

Ошибка:

TypeError at /main/search/
int() argument must be a string, a bytes-like object or a number, not 'function'
Request Method: POST
Request URL:    http://127.0.0.1:8000/main/search/
Django Version: 2.1.7
Exception Type: TypeError
Exception Value:    
int() argument must be a string, a bytes-like object or a number, not 'function'
Exception Location: /usr/local/Cellar/python/3.7.2_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/models/fields/__init__.py in get_prep_value, line 1807
Python Executable:  /Users/Documents/PycharmProjects/OP/bin/python
Python Version: 3.7.2

1 Ответ

0 голосов
/ 11 апреля 2019

Этот код действительно полон проблем.Вот некоторые из них.

В to_DB:

  • Вы на самом деле не вызываете функцию get_userid, вы просто ссылаетесь на нее.Это причина вашей непосредственной ошибки.В Python вам всегда нужно использовать () для вызова функции.
  • Вы не передаете аргумент request этой функции.
  • Вы ничего не возвращаете из этой функции.
  • Поскольку вы уже создали объект OPQuery, почему вы сразу же запрашиваете его обратно из БД?У вас уже есть.
  • Вы нигде не используете параметр dic.

В get_userid:

  • is_authenticated потребностивызываться на текущем пользовательском экземпляре, а не на пользовательском классе.Это должно быть request.user.is_authenticated.
  • Аналогично для is_anonymous.
  • Вам не нужны круглые скобки вокруг возвращаемых значений.
  • Вся эта функция в любом случае бессмысленна.

Будучи настолько конструктивным, насколько это возможно, вы боретесь с основными понятиями Python здесь.Вам действительно нужно вернуться и сделать вводный урок по Python, а затем урок по Django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...