2013-12-19 98 views
3

我可以向django模型字段添加一些任意屬性嗎?將自定義屬性添加到django模型字段

例如:

charField = models.CharField('char field', max_length=1024, aaaaa=true) 

我能否添加屬性AAAAA?

這是可行的嗎?

+1

你想要什麼這個屬性做什麼呢? –

回答

4

如果檢查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): 

所以你不能傳遞一個自定義參數。

您必須create a custom field

0

你沒有提到你想要這個屬性實際上是做的。

一般來說,如果你想定製CharField行爲,它不是CharField提供外的開箱,你需要創建自己的CustomCharField擴展models.CharField並實現你的行爲」預計從aaaaaaa=True

1

也許不是最有效的方式,但這樣的工作對我來說:

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) 
+1

您可能更喜歡使用'kwargs.pop('aaaaa')'而不是用'.get'進行檢索,然後創建一個新的kwargs對象。 – emi

相關問題