【问题标题】:text manipulation in django as soon as user/admin enters it用户/管理员输入后立即在 django 中进行文本操作
【发布时间】:2012-01-12 02:50:23
【问题描述】:

我有一个简单的模型:

class Article(models.Model):
    name = models.CharField(max_length=1000)
    custom_name = models.CharField(max_length=1000)

自定义函数: def process_text(my_string): 返回 len(my_string)

我想要以下内容:

custom_name = process_text(name)

假设管理员输入nameMark Pilgrim,那么custom_name 应该具有12 的自动填充值。

在 admin.py 我可以有类似的东西

prepopulated_fields

有什么简单的方法来解决它。

谢谢!!

【问题讨论】:

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


    【解决方案1】:

    最简单的方法是添加一个侦听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 列出了该方法期望的参数。

    【讨论】:

      【解决方案2】:

      如果您有带有这些字段的表单,那么您可以在第一个失去焦点时使用一些 javascript 来更新第二个字段。然后当有人在第一个字段中输入内容并离开该字段时,js可以计算长度并将值放入第二个字段。

      如果这应该在后端级别完成 - 那么您可以例如覆盖模型的 save() 方法。更多在这里 - https://docs.djangoproject.com/en/dev/topics/db/models/#overriding-predefined-model-methods

      干杯。

      【讨论】:

        【解决方案3】:

        在我看来,最好的选择是在表单验证阶段设置值。

        【讨论】:

        • 您能详细说明一下吗?
        猜你喜欢
        • 2021-08-03
        • 1970-01-01
        • 2017-06-23
        • 2017-01-18
        • 2015-08-29
        • 2020-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多