关于django __str__ 与 __unicode__ 问题

因为所有字符串都作为Unicode字符串从数据库返回,基于字符的模型字段(CharField、TextField、URLField等)在Django从数据库检索数据时将包含Unicode值。即使数据可以放入ASCII字节字符串,也总是如此。


您可以在创建模型或填充字段时传入bytestring,并且Django会在需要时将其转换为Unicode。


¶选择__str__()和__unicode__()

请注意


如果您在python3上,您可以跳过这一部分,因为您总是会创建__str__()而不是__unicode__()。如果希望与Python 2兼容,可以使用python_2_unicode_compatible()来修饰模型类。


默认情况下使用Unicode的一个结果是,在从模型中打印数据时必须小心。


特别是,我们建议您实现__unicode__()方法,而不是给您的模型一个__str__()方法。在__unicode__()方法中,您可以非常安全地返回所有字段的值,而不必担心它们是否适合于bytestring。(按照Python的工作方式,__str__()的结果总是bytestring,即使您意外地试图返回Unicode对象)。


当然,如果您愿意,您仍然可以在模型上创建__str__()方法,但是您不需要这样做,除非您有充分的理由。Django的模型基类自动提供了一个__str__()实现,它调用__unicode__()并将结果编码为UTF-8。这意味着您通常只需要实现__unicode__()方法,并在需要时让Django处理对bytestring的强制。

你可能感兴趣的:(python)