mil*_*c88 6 django django-models
我可以在django模型字段中添加一些任意属性吗?
例如:
charField = models.CharField('char field', max_length=1024, aaaaa=true)
Run Code Online (Sandbox Code Playgroud)
我可以添加属性aaaaa吗?
这可行吗?
如果您检查 CharField
class CharField(Field):
description = _("String (up to %(max_length)s)")
def __init__(self, *args, **kwargs):
super(CharField, self).__init__(*args, **kwargs)
self.validators.append(validators.MaxLengthValidator(self.max_length))
Run Code Online (Sandbox Code Playgroud)
它接受**kwargs但也可以调用,super并且Inherited __init__(Field对象)仅接受命名参数。
class Field(object):
def __init__(self, verbose_name=None, name=None, primary_key=False,
max_length=None, unique=False, blank=False, null=False,
db_index=False, rel=None, default=NOT_PROVIDED, editable=True,
serialize=True, unique_for_date=None, unique_for_month=None,
unique_for_year=None, choices=None, help_text='', db_column=None,
db_tablespace=None, auto_created=False, validators=[],
error_messages=None):
Run Code Online (Sandbox Code Playgroud)
因此,您不能传递自定义参数。
您必须创建一个自定义字段
您可以将其作为属性分配给字段对象本身:
charField = models.CharField('char field', max_length=1024)
charField.aaaaa = True
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要一个衬垫,请创建一个函数,例如:
def extra_attr(field, **kwargs):
for k, v in kwargs.items():
setattr(field, k, v)
return field
Run Code Online (Sandbox Code Playgroud)
然后使用:
charField = extra_attr(models.CharField('char field', max_length=1024), aaaaa=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4893 次 |
| 最近记录: |