【问题标题】:Django CustomField inheritance from models.CharField -- unexpected keyword argument从models.CharField继承的Django CustomField——意外的关键字参数
【发布时间】:2016-08-26 21:36:06
【问题描述】:

我的应用程序需要的字段所需的属性很少,所以我按照代码创建了custom fields

这是我的 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'

【问题讨论】:

标签: python django postgresql django-models


【解决方案1】:

我想你只是在这里打错了 - def __int__ 应该是 def __init__super(...).__int__(..) 调用应该是 super(...).__init__(..)

【讨论】:

    【解决方案2】:

    这是因为您传递参数的顺序。回溯显示success_order 被传递给CharField 的构造函数,而这不应该。这是因为它是在 kwargs 中传递的。更改顺序应该可以解决问题。 unique=True 将被 CharField 构造函数接受。

    【讨论】:

    • 这是我想到的第一件事,但是当您改变关键字顺序时,它不会检查您是否使用交互式调试器来检查 **kwargs 中的内容。
    猜你喜欢
    • 2022-07-28
    • 2021-02-08
    • 1970-01-01
    • 2013-10-29
    • 2022-01-18
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 2016-09-12
    相关资源
    最近更新 更多