簡體   English   中英

django自定義字段-如何修改另一個字段的值

[英]django custom field - how to modify another field's value

我正在開發django自定義字段。 在自定義字段def中,如何編寫保存另一個字段的代碼? 例如,在自定義字段的def內部,我編寫了pre_save方法,但是在將值分配給其他模型字段之后,我調用了model_instance.save()方法,但是這導致了無限循環。 你能告訴我怎么做嗎?

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期間成功創建了新字段firstname和lastname,這是我想填寫的,當我填充fullnamefield時,firstname和lastname也應該被填充。 這個全名邏輯只是一個例子,但要求是相同的。

您可以使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM