0

フォーム入力データを大文字に変換しようとすると、「'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'),
        )

フォーム コードの「クリーン」メソッドのオーバーライドは、モデルの戻り値に基づいて再構成する必要があると思います。方法がわかりません。

4

1 に答える 1

0

.upperこれは良い方法ではありません。内のすべてのオブジェクトを呼び出そうとしcleaned_dataます。intNone

解決策は次のようなものです。

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

しかし、なぜこれが必要なのですか?文字列をそのまま保存し、大文字で表示する方が良いのでしょうか?

于 2012-05-24T17:54:24.333 に答える