管理ページでのDjango Unicodeエラー 質問する

管理ページでのDjango Unicodeエラー 質問する

私は Unicode の性質については漠然と理解していますが、すべての部分がどのように組み合わさるのかはよくわかりません。管理ページで特定のインスタンスを表示するときにエラーが発生します。

レンダリング中に UnicodeEncodeError が発生しました: 'ascii' コーデックは位置 29 の文字 u'\u2019' をエンコードできません: 序数が範囲外です (128)

これが私のモデルです:

class Proposal(models.Model):
    project = models.ForeignKey(Project)
    dateCreated = models.DateTimeField(editable=False)
    xml = models.TextField(max_length=1000000)

    def __str__(self):
        return str('Proposal for: %s' % self.project.name)

私はMySQLデータベースにアクセスし、DB、テーブル、列がすべてutf8_unicode_ciとして照合されていることを確認しましたが、なぜページがASCIIとしてレンダリングしようとしているのか理解できません。さまざまなフォーラムやドキュメントを見ると、strそしてユニコード機能がありますが、インスタンスのリストは管理ページに正常に表示されるため、これとは何の関係もないようです。問題が発生しているのは、実際のインスタンスのフォームが表示されているだけです。

以下は、phpmyadmin から取得した XML の例です。

<?xml version="1.0"  encoding="UTF-8"?>
<proposal>

  <section title="OVERVIEW">
    <section title="Introduction">
      <text>
    This proposal is not in the system because it was completed as an agreement in Word previous to us getting this application up and running.  Please refer to the attachments in this project for documentation or to see the agreement.
      </text>
    </section>
  </section>
</proposal>

意図的に XML を除外しようとしましたが (長期的には管理セクションで編集できるようにしたいので、これはできません)、それでも同じエラーが発生するため、XML が問題であるとさえ確信できません。XML が問題ではない場合、このページが表示されない原因が他に何なのかわかりません。

class ProposalAdmin(admin.ModelAdmin):
    exclude = ('xml',)
admin.site.register(Project)

ベストアンサー1

どこかに文字があります。おそらく 内ですself.project.name。エラー メッセージ全体を確認すれば、おそらく見つけられるでしょう。

ただし、データベースから Unicode の結果を取得する場合は、次のようにする方が賢明でしょう。

def __str__(self):
    return ('Proposal for: %s' % self.project.name).encode('ascii', errors='replace')

最も賢いやるべきことなので、Djangoドキュメントで推奨されている代わりに次の関数を実装します__unicode__

def __unicode__(self):
    return u'Proposal for: %s' % self.project.name

おすすめ記事