Есть вот такая система моделей
class NormalTag(models.Model):
caption = models.CharField(max_length=1024, unique=True,
blank=False, default=None)
def __init__(self, caption):
super().__init__()
self.caption = caption
def __str__(self):
return self.caption
class Tag(models.Model):
caption = models.CharField(max_length=1024)
def __init__(self, caption):
super().__init__()
self.caption = caption
self.set_normaltag()
def normalize(self):
return self.caption.lower().replace(" ",'').replace("\"",'')
def set_normaltag(self):
try:
normaltag = self.get_normaltag()
except NormalTag.DoesNotExist:
normaltag = NormalTag(self.normalize())
normaltag.save()
def get_normaltag(self):
return NormalTag.objects.get(caption=self.normalize())
def __str__(self):
return self.caption
При вызове из шелла выдает ошибку:
[env]user ~/path/to/project > python manage.py shell
Python 3.5.2 (default, Jul 5 2016, 12:43:10)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from home.models import NormalTag, Tag
>>> t = Tag("ПроВеРка ТэГа")
Traceback (most recent call last):
File "
Так и не понял, откуда она берется.
Ответ
В джанге много чего происходит магическим образом. То есть во фреймворке не всё соотвествует питону, хотя и написано на нём.
В данном случае вы передали позиционный аргумент в модель, а при создании моделей нужно передавать только именованные аргументы.
В вашем случае нужно было написать:
t = Tag(caption="ПроВеРка ТэГа")
И да, в моделях переопределять метод __init__ надо с осторожностью, если нужно добавить какие-то дополнительные действия во время создания модели, то лучше использовать метод менеджера модели create(), он создан специально для этого.
Комментариев нет:
Отправить комментарий