用户/管理员输入后立即在django中进行文本操作

时间:2011-12-03 10:40:09

标签: django django-admin django-forms text-processing

我有一个简单的模型:

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)

假设管理员输入nameMark Pilgrim,则custom_name的自动填充值应为12

admin.py中的

可以有类似

的内容
prepopulated_fields

什么是一种简单的方法。

谢谢!

3 个答案:

答案 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列出了方法所期望的参数。