2013-02-03 189 views
0

我正在開發一個django自定義字段。在自定義字段def內,我如何編寫一些保存另一個字段的代碼?例如,在自定義字段的def中,我已經編寫了pre_save方法,但在將值分配給其他模型字段後,我調用了model_instance.save()方法,但導致了無限循環。你能告訴我如何做到這一點?django自定義字段 - 如何修改其他字段的值

class FullNameField(models.CharField): 

    def contribute_to_class(self, cls, name): 
     firstname_field = models.CharField(
       null=True, blank=True, max_length=50) 
     lastname_field = models.CharField(
       null=True, blank=True, max_length=50) 

     firstname_field.creation_counter = self.creation_counter 
     lastname_field.creation_counter = self.creation_counter 

     cls.add_to_class('firstname', firstname_field) 
     cls.add_to_class('lastname', lastname_field) 

     super(FullNameField, self).contribute_to_class(cls, name) 

上面的代碼成功地創建了新的領域執行syncdb時名字和姓氏,世界衛生大會T I想要做的是,當我填充fullnamefield,名字和姓氏也應該填充。這個全名邏輯僅僅是一個例子,但要求是一樣的。

+1

請出示你的代碼。從你的描述來看,你不知道你在做什麼。 – bikeshedder

+0

每當我填充一個自定義字段時,這個自定義字段背後的代碼會動態地創建一些額外的字段。沒事。同時,我想填充創建的額外字段,但無法做到這一點。我該怎麼做? – user1969142

+0

請顯示您的代碼和/或其片段,並解釋您正在嘗試做什麼。你最後的評論只會增加這個問題的困惑。 – bikeshedder

回答

0

您可以使用pre_save信號在班級保存時得到通知。

添加到您的contribute_to_class方法:

from django.db.models.signals import pre_save 

def populate_fullname(sender, instance, raw, **kwargs): 
    if raw: 
     return # be nice to syncdb 
    fullname = u'%s %s' % (instance.firstname, instance.lastname)) 
    setattr(instance, name, fullname) 

pre_save.connect(populate_fullname, cls) 
相關問題