1

followed_by フィールドを持つ注文モデルがあります。

class order(models.Model):
   followed_by = models.ForeignKey(User, limit_choices_to={'groups__name': "Managers"})

私はそのようなモデルとそれらのモデルのフォームをいくつか持っています。デフォルトでは、フォームにはマネージャーであるユーザーをリストするモデル選択フィールドが表示されます。これで問題ありません。しかし、表示は良くありません。ユーザー名が表示され、名と姓が必要です。これはうまく機能します: Django ModelChoiceField を変更して、ユーザー名ではなくユーザーのフル ネームを表示します。

ただし、すべてのフォームで、ユーザーをマネージャーに制限するクエリセットを宣言する必要があります。上記の方法を使用して、カスタム modelchoicefield がフィルター処理されたクエリセットにデフォルト設定されるようにすることはできますか? したがって、フォームから私はただ言うことができます:

followed_by = ManagerUserModelChoiceField()
4

3 に答える 3

0

@Enrico へのコメントの後、この考えが思い浮かびました。カスタム フィールドの「init」クラスを次のように上書きしました。

class UserModelChoiceField(forms.ModelChoiceField):
    def __init__(self, *args, **kwargs):
        super(UserModelChoiceField, self).__init__(queryset=User.objects.filter(groups__name="Managers"), *args, **kwargs)

以前にPythonでこのようなことを見たことがありますが、私はPythonを初めて使用するので、これが悪いことなのか、それともどうにかしてこれを改善する必要があるのか​​ わかりません。フィードバックをいただければ幸いです。そうは言っても、それは正しく機能しているようです。

于 2012-12-09T21:15:24.907 に答える
0

ModelChoiceField子クラスでクエリセットを定義できますか?

class UserModelChoiceField(ModelChoiceField):
    # Query that returns set of valid choices
    queryset = User.objects.filter(group__name='Managers')
    def label_from_instance(self, obj):
        return obj.get_full_name()
于 2012-12-08T17:45:48.440 に答える
0

クエリセットを引数としてManagerUserModelChoiceFieldクラスに渡してみてください。

followed_by = ModelChoiceField(queryset = User.objects.filter(groups__name="Managers")
于 2012-12-08T17:48:20.483 に答える