django - or_ не определено - PullRequest
0 голосов
/ 25 мая 2018

У меня запрос в файле django view.py.Я хочу использовать операторы «или» и «и» в запросе.Я получаю сообщение, в котором говорится, что 'or_' не определено, и мне было интересно, что за оператор import для этого, потому что я нигде не могу его найти.

Вот запрос:

@login_required(login_url='/login/')
def user_profile(request, username):
    user = request.user
    view = User.objects.filter(username = username).first()
    view_profile = Profile.objects.filter(user = view).first()
    friends = Friends.objects.filter(or_(
                                        and_(user = user.username, friends = view),
                                        and_(user = view.username, friends = user)
                                    ))
    print(friends)
    parameters = {
        'user':user,
        'view':view,
        'view_profile':view_profile,
        'friends':friends,

    }
    return render(request, 'users/view_profile.html', parameters)

Вот ошибка:

Internal Server Error: /assad/
Traceback (most recent call last):
  File "/Users/omarjandali/anaconda3/envs/MySplit/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
    response = get_response(request)
  File "/Users/omarjandali/anaconda3/envs/MySplit/lib/python3.6/site-packages/django/core/handlers/base.py", line 128, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/omarjandali/anaconda3/envs/MySplit/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/omarjandali/anaconda3/envs/MySplit/lib/python3.6/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/Users/omarjandali/Desktop/demo/mysplit/users/views.py", line 174, in user_profile
    friends = Friends.objects.filter(or_(
NameError: name 'or_' is not defined

1 Ответ

0 голосов
/ 25 мая 2018

Вероятно, импорт предполагается из модуля stdlib operator.Но в коде отсутствуют необходимые Q объекты для использования операторских функций таким образом.

Для меня это больше похоже на код, написанный кем-то, кто не знает, какиспользуйте Django ORM очень хорошо.Перепишите его так: для такого простого запроса функции Q и operator не нужны:

friends  = Friends.objects.filter(user=user.username, friends=view) 
friends |= Friends.objects.filter(user=view.username, friends=user)
...