(Django) 从 charField 中修剪空格 [英] (Django) Trim whitespaces from charField

查看:29
本文介绍了(Django) 从 charField 中修剪空格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何从 Django 中的 charField 的末尾去除空格(修剪)?

How do I strip whitespaces (trim) from the end of a charField in Django?

这是我的模型,正如您所看到的,我尝试过放入干净的方法,但这些方法从未运行过.

Here is my Model, as you can see I've tried putting in clean methods but these never get run.

我也试过 name.strip(), models.charField().strip() 但这些也不起作用.

I've also tried doing name.strip(), models.charField().strip() but these do not work either.

有没有办法强制 charField 为我自动修剪?

Is there a way to force the charField to trim automatically for me?

谢谢.

from django.db import models
from django.forms import ModelForm
from django.core.exceptions import ValidationError
import datetime

class Employee(models.Model):
    """(Workers, Staff, etc)"""
    name                = models.CharField(blank=True, null=True, max_length=100)

    def save(self, *args, **kwargs):
        try:
            # This line doesn't do anything??
            #self.full_clean()
            Employee.clean(self)
        except ValidationError, e:
            print e.message_dict

        super(Employee, self).save(*args, **kwargs) # Real save

    # If I uncomment this, I get an TypeError: unsubscriptable object
    #def clean(self):
    #   return self.clean['name'].strip()

    def __unicode__(self):
        return self.name

    class Meta:
        verbose_name_plural = 'Employees'

    class Admin:pass


class EmployeeForm(ModelForm):
    class Meta:
        model = Employee

    # I have no idea if this method is being called or not  
    def full_clean(self):       
        return super(Employee), self.clean().strip()
        #return self.clean['name'].strip()

已将代码更新为我的最新版本.我不确定我做错了什么,因为它仍然没有去除空格(修剪)名称字段.

Edited: Updated code to my latest version. I am not sure what I am doing wrong as it's still not stripping the whitespace (trimming) the name field.

推荐答案

必须调用模型清理(它不是自动的)所以在你的保存方法中放置一些 self.full_clean().
http://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.full_clean

Model cleaning has to be called (it's not automatic) so place some self.full_clean() in your save method.
http://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.full_clean

至于你的表单,你需要返回剥离干净的数据.

As for your form, you need to return the stripped cleaned data.

return self.cleaned_data['name'].strip()

不知何故,我认为您只是尝试做一些行不通的事情.请记住,形式和模型是两种截然不同的事物.

Somehow I think you just tried to do a bunch of stuff that doesn't work. Remember that forms and models are 2 very different things.

查看有关如何验证表单的表单文档http://docs.djangoproject.com/en/dev/ref/forms/验证/

Check up on the forms docs on how to validate forms http://docs.djangoproject.com/en/dev/ref/forms/validation/

super(Employee), self.clean().strip() 根本没有意义!

这是您修复的代码:

class Employee(models.Model):
    """(Workers, Staff, etc)"""
    name = models.CharField(blank=True, null=True, max_length=100)

    def save(self, *args, **kwargs):
        self.full_clean() # performs regular validation then clean()
        super(Employee, self).save(*args, **kwargs)


    def clean(self):
        """
        Custom validation (read docs)
        PS: why do you have null=True on charfield? 
        we could avoid the check for name
        """
        if self.name: 
            self.name = self.name.strip()


class EmployeeForm(ModelForm):
    class Meta:
        model = Employee


    def clean_name(self):
        """
        If somebody enters into this form ' hello ', 
        the extra whitespace will be stripped.
        """
        return self.cleaned_data.get('name', '').strip()

这篇关于(Django) 从 charField 中修剪空格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆