#python #django #django-models
#python #django #django-модели
Вопрос:
У меня есть модель:
class User(models.Model):
user_id = models.IntegerField(default=0)
user_name = models.CharField(max_length=20)
user_age = models.IntegerField(default=0)
def __init__(self, user_id, user_name, user_age):
self.user_id = user_id
self.user_name = user_name
self.user_age = user_age
И затем я пытаюсь создать экземпляр этой модели:
new_user = User(0, 'Andrew', 25)
new_user.save()
Но это выдает мне ошибку:
'User' object has no attribute '_state'
Что это значит?
Комментарии:
1. Вероятно, вам следует использовать
auth
фреймворк Django, в котором естьUser
модель и несколько абстрактных базовых классов, которые вы можете использовать. Это реализует множество функций, среди прочих криптографически безопасный метод для сохранения паролей и представлений входа / выхода из системы / сброса пароля по умолчанию и т.д. Взгляните в документацию .
Ответ №1:
В коде отсутствует вызов суперкласса’ __init__
:
def __init__(self, user_id, user_name, user_age):
super(User, self).__init__() # <----
self.user_id = user_id
self.user_name = user_name
self.user_age = user_age
Ответ №2:
На самом деле вам вообще не следует определять __init__
метод. falsetru показывает, что вам нужно вызвать метод суперкласса, но все функциональные возможности, которые вы добавили в свою собственную версию, уже предоставлены этим.
Комментарии:
1. Спасибо. Но предположим, что я хочу иметь некоторые значения по умолчанию для полей, как я могу это сделать, не определяя init? Кроме того, если я просто использую инициализацию по умолчанию, то мне придется явно передавать переменные с их именами, например, new_user = User (user_id = 0, user_name = ‘Andrew’, user_age = 15), тогда как я хотел бы иметь возможность просто отправлять эти значения следующим образом: new_user = User (0, ‘Andrew’, 15).
2. Вы уже определили значения по умолчанию в самих объявлениях полей.