我有一个简单的模型:
class Article(models.Model):
name = models.CharField(max_length=1000)
custom_name = models.CharField(max_length=1000)
自定义功能: def process_text(my_string): return len(my_string)
我想要以下内容:
custom_name = process_text(name)
假设管理员输入name
为Mark Pilgrim
,则custom_name
的自动填充值应为12
。
可以有类似
的内容prepopulated_fields
什么是一种简单的方法。
谢谢!
答案 0 :(得分:0)
如果你有这些字段的表单,那么你可以使用一些javascript来在第一次失去焦点时更新第二个字段。然后当有人在第一个字段中输入内容并离开字段时,js可以计算长度并将值放在第二个字段中。
如果这应该在后端级别完成 - 那么你可以例如覆盖模型的save()方法。更多信息 - https://docs.djangoproject.com/en/dev/topics/db/models/#overriding-predefined-model-methods
干杯。
答案 1 :(得分:0)
在我看来,最好的选择是在表单验证阶段设置值。
答案 2 :(得分:0)
最简单的方法是添加一个侦听pre_save
信号的方法。
以下是您可以使用的示例(此代码位于您的应用的models.py
中)
from django.db.models.signals import pre_save
from django.dispatch import receiver
# Your models go here
def process_text(mystring):
return len(mystring)
@receiver(pre_save, sender=Article)
def my_handler(sender, **kwargs):
if not kwargs['raw']:
obj = kwargs['instance']
obj.custom_name = process_string(obj.name)
signals documentation有更多关于信号的信息,pre_save
documentation列出了方法所期望的参数。