2016-08-26 1 views
0

Мое приложение требует нескольких атрибутов, необходимых для полей, поэтому я пошел и выполнил код для создания custom fields.Наследование Django CustomField из models.CharField - неожиданный аргумент ключевого слова

Это мой CustomCharacterField:

class CustomCharField(models.CharField): 
    def __int__(self, success_order=None, *args, **kwargs): 
     self.success_order = success_order 
     super(CustomCharField, self).__int__(*args, **kwargs) 

    def get_success_order(self): 
     return int(self.success_order) 


    def deconstruct(self): 
     name, path, args, kwargs = super(CustomCharField, self).deconstruct() 
     del kwargs["success_order"] 
     return name, path, args, kwargs 

Вот мой models.py

class NameModel(models.Model): 

    name = fields.CustomCharField(max_length=250, unique=True, success_order=1) 

Вот это отслеживающий:

File "/home/kt/Documents/phc/phc/Forms/models.py", line 204, in <module> 
    class SchemeModel(models.Model): 
    File "/home/kt/Documents/phc/phc/Forms/models.py", line 220, in SchemeModel 
    scheme_name = fields.CustomCharField(verbose_name="Scheme", max_length=250, unique=True, success_order=1) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/models/fields/__init__.py", line 1072, in __init__ 
    super(CharField, self).__init__(*args, **kwargs) 
TypeError: __init__() got an unexpected keyword argument 'success_order' 
+2

Похоже, вам нужно определить ['.deconstruct (self)'] (https://docs.djangoproject.com/en/1.10/howto/custom-model-fields/#field-deconstruction) – pnovotnak

+0

это и исправление опечаток помогло ... спасибо – kt14

ответ

3

Я думаю, что вы просто опечатка здесь - def __int__ должен быть и super(...).__int__(..) вызов должен быть super(...).__init__(..).

-1

Это из-за того, в котором вы передать аргументы. Обратный вывод показывает, что success_order передается конструктору CharField, которого не должно быть. Это потому, что оно передается в кваргах. Изменение порядка должно делать трюк. unique = True будет приниматься конструктором CharField.

+0

Это первое, о чем я думал, но он не проверяет, используете ли вы интерактивный отладчик, чтобы проверить, что находится в '** kwargs', когда вы меняете порядок ключевых слов. –

Смежные вопросы