我可以向django模型字段添加一些任意屬性嗎?將自定義屬性添加到django模型字段
例如:
charField = models.CharField('char field', max_length=1024, aaaaa=true)
我能否添加屬性AAAAA?
這是可行的嗎?
我可以向django模型字段添加一些任意屬性嗎?將自定義屬性添加到django模型字段
例如:
charField = models.CharField('char field', max_length=1024, aaaaa=true)
我能否添加屬性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))
它接受**kwargs
也可來電super
和繼承__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):
所以你不能傳遞一個自定義參數。
你沒有提到你想要這個屬性實際上是做的。
一般來說,如果你想定製CharField
行爲,它不是CharField
提供外的開箱,你需要創建自己的CustomCharField
擴展models.CharField
並實現你的行爲」預計從aaaaaaa=True
。
如果您看一下/ django/db/models/fields/init .py,您可以看到這種行爲不是作爲字段使用的。 init只接受預定義的參數。
當然,您可以自由編寫自己的自定義字段(https://docs.djangoproject.com/en/dev/howto/custom-model-fields/)。
也許不是最有效的方式,但這樣的工作對我來說:
class SpecialCharField(models.CharField):
def __init__(self, *args, **kwargs):
self.aaaaa=kwargs.get('aaaaa',false)
#delete aaaaa from keyword arguments
kwargs = {key: value for key, value in kwargs.items() if key != 'aaaaa'}
super(SpecialCharField,self).__init__(*args, **kwargs)
class ModelXY(models.Model):
charField = SpecialCharField('char field', max_length=1024, aaaaa=true)
您可能更喜歡使用'kwargs.pop('aaaaa')'而不是用'.get'進行檢索,然後創建一個新的kwargs對象。 – emi
你想要什麼這個屬性做什麼呢? –