0

私はこのような単純なモデルを持っています

class UserType( models.Model ) :
    def __unicode__( self ) :
        return self.name

    TYPE_CHOICES = (
        ( 'ad', 'administrator'    ),
        ( 'mo', 'moderator'        ),
        ( 'vi', 'viewer'           ),
        ( 'pm', 'property manager' ),
        ( 'po', 'property owner'   ),
        ( 'vm', 'vendor manager'   ),
        ( 've', 'vendor'           ),
        ( 'te', 'tenant'           ),
    )

    name = models.CharField( max_length = 2, choices = TYPE_CHOICES )

で、 toを持つadmins.pyを設定filter_horizontal = ( 'user_types', )しました。ただし、管理ページでは、M2M の水平フィルターはタプルの短い名前のみを表示します。UserProfileManyToManyFieldUserTypeUserProfile

また、テンプレートで、特定のユーザーが持っているユーザー タイプのリストを表示したいと考えています。したがって、私のテンプレートコードは次のようになります

User type:
<ul>
    {% if user_object.profile.user_types.all %}
        {% for user_type in user_object.profile.user_types.all %}
            <li>{{ user_type|capfirst }}</li>
        {% endfor %}
    {% else %}
        <li>No user type</li>
    {% endif %}
</ul>

テンプレートでは、短い名前のみが表示されます。通常、 のようなことを行うことで長い名前を表示できることはわかっています{{ get_user_type_display }}が、この場合、M2M の場合は機能しません。

だから私の質問は2つあります:

  1. 管理ページで M2M チョイス/タプルの長い名前を表示するにはどうすればよいですか?
  2. テンプレートの M2M チョイス/タプルに長い名前を表示するにはどうすればよいですか?
4

2 に答える 2

2

次のことを試してください。

class UserType( models.Model ) :
    TYPE_CHOICES = (
        ( 'ad', 'administrator'    ),
        ( 'mo', 'moderator'        ),
        ( 'vi', 'viewer'           ),
        ( 'pm', 'property manager' ),
        ( 'po', 'property owner'   ),
        ( 'vm', 'vendor manager'   ),
        ( 've', 'vendor'           ),
        ( 'te', 'tenant'           ),
        )
    STR_CHOICES = { key : value for (key,value) in TYPE_CHOICES }

    name = models.CharField( max_length = 2, choices = TYPE_CHOICES )

    def __str__(self):
        return self.STR_CHOICES[self.name]
于 2012-04-09T13:05:11.223 に答える