1

私はフォームを持っています:

class NewUserForm(forms.ModelForm):
    first_name = forms.CharField(label=u'First name', required=True)
    last_name = forms.CharField(label=u'Last name', required=True)
    permissions = forms.ModelMultipleChoiceField(Permission.objects.none(), widget=forms.CheckboxSelectMultiple)

    def __init__( self, *args, **kwargs ):
        super( NewUserForm, self ).__init__( *args, **kwargs )
        ctypes = ContentType.objects.filter(
            Q(app_label='articles') |
            Q(app_label='tags')
        )
        self.fields['permissions'].queryset = Permission.objects.filter(content_type__in=ctypes)

    class Meta:
        model = User

テンプレートのアクセス許可では、次のようなラベルが表示されます。

[] articles | article | Can change article
[] articles | article | Can delete article
[] articles | article | Can view article

[...]

このラベルを変更するには? (たとえば)「記事を変更できます」、おそらく他の言語でのみ取得したい。

4

1 に答える 1

3

メソッドをサブクラス化ModelMultipleChoiceFieldして定義できますlabel_from_instance

class MyModelMultipleChoiceField(forms.ModelMultipleChoiceField):
    def label_from_instance(self, obj):
        return "%s" % obj.name # e.g. 'Can change article'

次に、フォームでフィールド サブクラスを使用します。

class NewUserForm(forms.ModelForm):
    ...
    permissions = MyModelMultipleChoiceField(Permission.objects.none(), widget=forms.CheckboxSelectMultiple)
    ...
于 2013-05-15T12:19:40.360 に答える