[英]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.