Первый аргумент get_object_or_404 () должен быть Model, Manager или QuerySet, а не 'function' - PullRequest
1 голос
/ 08 июня 2019

Я пытаюсь показать некоторые данные на основе user_id в базе данных, но он продолжает получать эту ValueError.Может кто-нибудь помочь мне узнать, что я делаю не так?

Это мои views.py

from django.shortcuts import render, get_object_or_404
from .models import user

def index(request):
    return render(request, 'pages/index.html')

def user(request, user_id):
    profile = get_object_or_404(user, pk=user_id)
    context = {
        'profile' : profile
    }
    return render(request, 'user/user.html', context)

1 Ответ

1 голос
/ 08 июня 2019

Поскольку вы определили функцию с именем user, которая перезаписала здесь ссылку на модель user.

Вы можете использовать псевдоним в вашем импорте, например:

from django.shortcuts import render, get_object_or_404
from .models import user <b>as UserModel</b>

def index(request):
    return render(request, 'pages/index.html')

def user(request, user_id):
    profile = get_object_or_404(<b>UserModel</b>, pk=user_id)
    context = {
        'profile' : profile
    }
    return render(request, 'user/user.html', context)

При этом в соответствии с правилами стиля PEP-8 имена классов должны быть записаны в CamelCase, а имена функций - в lowercase_separated_by_underscores.Поэтому, если вы соответствуете этим рекомендациям, вам следует переименовать вашу модель user в User.

Поскольку у Django уже есть модель с именем User [Django-doc]django.contrib.auth), вы можете переименовать, например, в Profile.

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