Подтвердить что ты не робот

Django - User.DoesNotExist не существует?

Я пытаюсь заполучить Django. Я использую Pydev на Eclipse. Я написал простую страницу регистрации, на которой я не могу работать. Eclipse жалуется, что User.DoesNotExist undefined. Скорее всего, мне не хватает чего-то тривиального. Здесь соответствующая часть кода:

from django.contrib.auth.models import User
...
class SignUpForm (forms.Form):
    ...
    def clean_username (self): 
        try:
            User.objects.get(username=self.cleaned_data['username'])
        except User.DoesNotExist:
            return self.cleaned_data['username']
        raise forms.ValidationError(USERNAME_ALREADY_IN_USE)
    ...
4b9b3361

Ответ 1

Проблема действительно с PyDev, а не с вашим кодом. То, что вы сделали, абсолютно правильно, но для IDE всегда будет сложно разрешить атрибуты на динамическом языке, таком как Python. В случае исключения DoNotExist он добавляется через __metaclass__, а не через обычное наследование объектов, поэтому PyDev вряд ли сможет его найти. Однако это определенно должно работать.

Ответ 2

Я только что обнаружил, что Pydev действительно имеет хороший обходной путь для этого.

Перейдите в Окно > Настройки, затем Pydev > Редактор > Анализ кода > .

Перейдите на вкладку Undefined и добавьте "DoNotExist" в текстовое поле . Рассмотрим следующие имена как глобальные.

Ответ 3

Pydev имеет обходное решение для таких случаев (когда члены определены во время выполнения). Просто добавьте # @UndefinedVariable в конце строки, которые вызывают предупреждение (или ctrl + 1 на клавиатуре, когда курсор находится в "DoNotExist" ), и он не будет жаловаться.

Ответ 4

Может ли Eclipse разрешить атрибуты, созданные во время выполнения через __metaclass__ es?

Обратите внимание, что вы никогда не определяете DoesNotExist на любой из ваших моделей, и она также не определена на django.db.models.base.Model.

Ответ 5

Вы также можете решить его по-другому: просто перейдите в класс User и добавьте @DynamicAttrs в docstring.
Это скажет PyDev, что атрибуты класса добавляются динамически и не будут больше жаловаться на "проблемы" вроде DoNotExist.

Ответ 6

У меня такая же проблема на Ubuntu в VirtualEnv для решения проблемы. Я использовал эти фрагменты.

http://djangosnippets.org/snippets/191/#c3091

В parituclar он создает пользовательские поля с кодом:

class UserField(forms.CharField):
    def clean(self, value):
        super(UserField, self).clean(value)
        try:
            User.objects.get(username=value)
            raise forms.ValidationError("Someone is already using this username. Please pick an other.")
        except User.DoesNotExist:
            return value

Ответ 7

Eclipse жалуется, что User.DoesNotExist undefined.

Что вы подразумеваете под этим? У вас есть ошибка python и трассировка стека? Этот код должен работать (как в документации). Похож на проблему затмения. Просто запустите dev-сервер и посмотрите, работает ли он или нет:

manage.py runserver