2

Django AdminForm の ForeignKey Selectbox に関連するプロジェクトだけを表示するために、ActionAdminForm クラスを使用して ActionAdmin モデルをカスタマイズしました。値を事前に選択するには、ここに投稿されたようなクラスを使用しましたhttps://stackoverflow.com/a/9191583/326905。どうもありがとう、これは本当にうまくいきます。

しかし、ユーザーが Customer -> Project -> Action から移動せず、django admin の Actions に直接移動する場合、次のようにフォーマットされた ActionAdmin Form のforeignkey プロジェクトの選択ボックスに値を表示したい:

Customername1 - Projectname1
Customername1 - Projectname2
Customername2 - Projectname3


私の質問は、以下のコードのelseケースでself.fields [ "project"]をオーバーライドして、 Project.customer.nameとProject.name
から連結されたselectbox値を取得するにはどうすればよいですか?

class ActionAdminForm(ModelForm):
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super(ActionAdminForm, self).__init__(*args, **kwargs)
        if self.request.GET.get('project'):
            prj = Project.objects.get(id=self.request.GET.get('project'))
            self.fields["project"].queryset = Project.objects.filter(customer = prj.customer)
        else:


           self.fields["project"] = ProjectModelChoiceField(Project.objects.all().order_by('name'))

    class Meta:
        model = Action
4

1 に答える 1

1

私は解決策を得ました。うん。最初に、self.fields ["project"]だけを使用しようとすると常にエラーが発生しましたが、今では機能します。私はそれをelseに入れて、この説明に影響されて、以下のように ProjectModelChoiceField を書きました: http://bradmontgomery.blogspot.de/2009/01/custom-form-for-djangos-automatic-admin.html

class ProjectModelChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return "%s - %s"%(obj.customer.name, obj.name)
于 2012-06-26T20:56:38.167 に答える