1

以下のコードは、ドロップダウン メニューから特定の値を削除します。正常に動作しますが、ユーザーに特定の権限がない場合は値を削除したいと思います。ModelForm のコンストラクタで request.user にアクセスするにはどうすればよいですか? または、私がやろうとしていることを達成するためのより良い方法はありますか?

class AnnouncementModelForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(AnnouncementModelForm, self).__init__(*args, **kwargs)
        self.fields["category"].queryset = AnnouncementCategory.objects.filter(can_post=True)   
4

2 に答える 2

1

ModelForm のコンストラクタで request.user にアクセスするにはどうすればよいですか?

Form コンストラクターで使用するには、リクエストを渡すだけです。

class AnnouncementModelForm(forms.ModelForm):

    def __init__(self, request, *args, **kwargs):
        super(AnnouncementModelForm, self).__init__(*args, **kwargs)
        qs = request.user.foreignkeytable__set.all()
        self.fields["category"].queryset = qs
于 2009-10-16T10:56:01.600 に答える
1

これが私がそれを解決した方法です:

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == "category" and not request.user.has_perm('can_post_to_all'):
        kwargs["queryset"] = AnnouncementCategory.objects.filter(can_post=True)
        return db_field.formfield(**kwargs)
    return super(AnnouncementAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
于 2009-10-16T11:24:52.307 に答える