Django — обновление управления пользователями/учетными записями

Я пытаюсь обновить информацию об учетной записи пользователя через форму. У меня есть форма в порядке, которая просто отображает поле пароля/электронной почты и очищает поле электронной почты. У меня проблема с моими взглядами. Это ошибка, которую я получаю: Менеджер недоступен через экземпляры пользователя. Это мои взгляды: функция my_account.

def my_account(request):
    user = request.user
    if request.method == 'POST':
        form = MyAccountForm(request.POST)
        if form.is_valid():
            user = user.objects.get(username=username),
            password = user.set_password('password2'),
            email = forms.cleaned_data['email']
            user.save()
            return HttpResponseRedirect('/')
    else:
        form = MyAccountForm()
    variables = RequestContext(request, {
        'form': form,
    })
    return render_to_response(
        'my_account.html',
        variables
    )

person Megan    schedule 11.12.2012    source источник
comment
однако это точная копия: stackoverflow.com/questions/3874187/. Пожалуйста, попробуйте просто выполнить поиск по сообщению об ошибке, прежде чем задавать новый вопрос.   -  person Colleen    schedule 11.12.2012
comment
Я сделал, и, очевидно, это была не единственная моя проблема. Я всегда сначала ищу свои собственные ошибки, но иногда это не всегда полезно.   -  person Megan    schedule 11.12.2012


Ответы (1)


где у вас есть

user.objects.get

ты хочешь

User.objects.get

objects — это менеджер, на который ссылается сообщение об ошибке, а user — экземпляр, на который ссылается (экземпляр User, фактический класс)

person Colleen    schedule 11.12.2012
comment
хорошо, теперь он говорит, что имя пользователя не определено, поэтому я добавил имя пользователя в параметры рядом с запросом и в свои переменные с формами, но теперь я получаю сообщение об ошибке: my_account() принимает ровно 2 аргумента (1 указан) - person Megan; 11.12.2012
comment
Ого, тут целый букет проблем. Похоже, вам нужно 1: прочитать сообщения об ошибках, 2: узнать больше о Django, 3: проверить свой код. Давайте разберемся с этим: 1. my_account() takes exactly 2 arguments (1 given)= вы изменили my_account, так что он принимает 2 параметра, но вы по-прежнему даете ему только 1 (предположительно, запрос). 2: Насколько мне известно, все данные в формах Django сериализуются в поле POST в request; переменные не передаются по отдельности. Чтобы получить доступ к username, вы не должны были добавлять его в качестве нового параметра, а должны были извлечь его из запроса. - person Colleen; 11.12.2012
comment
3: посмотрите на свой код. Вы нигде не определили username (связано с проблемой №1 - фактически не читать ваши сообщения об ошибках). Вы просто используете его в вызове get. Вам нужно фактически извлечь его из запроса, прежде чем вы сможете передать его чему-либо еще! - person Colleen; 11.12.2012
comment
Я пытался извлечь его из запроса, например, user = request.user(user = User.username), я знаю, что это неправильно, но я не мог понять, как это вызвать. Причина, по которой я добавил его в качестве параметра, заключалась в том, что я сделал это на предыдущей странице просмотра — user_page, и он работал правильно, поэтому я хотел посмотреть, поможет ли это. Я все еще очень новичок в этом, поэтому мне жаль, что я еще не полностью все понимаю. Кроме того, я читаю свои сообщения об ошибках, но иногда не полностью понимаю проблему. Я знал, что у него проблема с именем пользователя, и что я никуда не звонил, я просто не знал, где. - person Megan; 11.12.2012
comment
в качестве примера посмотрите, как вы извлекаете email. Вероятно, именно так вы хотите извлечь username. Хотя теперь, когда я перечитываю ваш код, зачем вы вообще это делаете? У вас уже есть user, когда вы сделали user = request.user. Кроме того, этот фрагмент user = request.user(user = User.username) неверен по многим причинам: 1. в request.user user является свойством, а не функцией, 2: вы сравниваете user с username в этом предложении, 3: как я сказал выше, User является имя класса, а не имя экземпляра, и поэтому не будет иметь свойства .username. - person Colleen; 11.12.2012
comment
В любом случае, я думаю, поскольку у вас уже есть user, вам следует просто удалить строку, в которой вы переназначаете ее, и все готово. - person Colleen; 11.12.2012
comment
Мой профессор хочет, чтобы мы назвали имя пользователя, так как мне извлечь его из request.user? - person Megan; 11.12.2012
comment
Что значит назвать имя пользователя? И пользователь является экземпляром пользователя, поэтому он имеет все свойства любого другого экземпляра пользователя... например, имя пользователя... - person Colleen; 11.12.2012