0

私はdjangoカスタムフィールドを開発しています。カスタム フィールド定義内で、別のフィールドを保存するコードをどのように記述できますか? たとえば、カスタム フィールドの定義内で、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 も入力する必要があることです。この fullname ロジックは単なる例ですが、要件は同じです。

4

1 に答える 1

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)
于 2013-02-03T15:24:11.050 に答える