将表单输入数据强制转换为大写

时间:2012-05-24 17:42:26

标签: django django-models django-forms

我遇到属性错误“'NoneType'对象在尝试将表单输入数据强制为大写时没有属性'strip'”。我的表单代码(从另一个程序员那里借来的干净方法)是:

class PostPageForm(ModelForm):
    class Meta: 
        model = PostPage
    def clean(self):
        return dict([(k, v.strip().upper()) for k, v in self.cleaned_data.items()])

和我的模特:

class PostPage(models.Model):
    client = models.CharField(max_length=50, choices=CLIENT_CHOICES)
    job_number = models.CharField(max_length=30, unique=True, blank=False, null=False)
    job_name = models.CharField(max_length=64, unique=False, blank=False, null=False)
    page_type = models.CharField(max_length=50, default='POST')
    create_date = models.DateField(("Date"), default=datetime.date.today)
    contact = models.ForeignKey(UserProfile)
    contact2 = models.ForeignKey(UserProfile, related_name='+', blank=True, null=True)
    contact3 = models.ForeignKey(UserProfile, related_name='+', blank=True, null=True)
    contact4 = models.ForeignKey(UserProfile, related_name='+', blank=True, null=True)

    def __unicode__ (self):
        return u'%s %s %s' % (self.client, self.job_number, self.job_name)

    class Admin: 
         pass

    class Meta:
        permissions = (
            ('view_postpage', 'View postpage'),
        )

我认为需要根据模型的返回值重新配置表单代码中“clean”方法的覆盖。我只是不确定如何。

1 个答案:

答案 0 :(得分:0)

要做到这一点,这不是一个好方法:它会尝试为.upper中的每个对象调用cleaned_data,它可以是intNone和任何对象其他类型。

解决方案如下:

return dict((k, v.strip().upper()) for k, v in self.cleaned_data.iteritems() if isinstance(v, basestring))

但你为什么需要这个呢?可能是按原样存储字符串更好,只是显示它们是大写的?