Другой подход заключается в переопределении метода ContentType.__str__
, который выглядит следующим образом:
def __str__(self):
# self.name is deprecated in favor of using model's verbose_name, which
# can be translated. Formal deprecation is delayed until we have DB
# migration to be able to remove the field from the database along with
# the attribute.
#
# We return self.name only when users have changed its value from the
# initial verbose_name_raw and might rely on it.
model = self.model_class()
if not model or self.name != model._meta.verbose_name_raw:
return self.name
else:
return force_unicode(model._meta.verbose_name)
Итак, вы можете переписать его, если вам не нужна какая-либо обратная совместимость:
from django.contrib.contenttypes.models import ContentType
from django.utils.encoding import force_unicode
def contenttype_as_str(self):
return force_unicode(self.model_class()._meta.verbose_name)
ContentType.__str__ = contenttype_as_str
Это немного сложно, но я считаю, что это более просто.Обратите внимание, что, поскольку Django 1.4.1 force_text
используется вместо force_unicode
.