1

ドキュメントを読み、デフォルトのフォームフィールドのオーバーライドを実装して、管理者の現在のユーザー (発行者) に属するアイテムのみを表示しようとしました。モデルProductのForeignKeyであるsub_typeという名前のオブジェクトを持つSimpleSubscriberモデルがあります。Publisher モデルもあり、SimpleSubscriber と Product の両方に publisher と呼ばれる ForeignKey オブジェクトがあります。私のadmin.pyにはこれがあります:

def formfield_for_foreignkey(self, db_field, request, **kwargs):
   if db_field.name == "sub_type":
       kwargs["queryset"] = SimpleSubscriber.objects.filter(sub_type=request.user)
   return super(SimpleSubscriberAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

ドキュメントでは、もともと

kwargs["queryset"] = SimpleSubscriber.objects.filter(owner=request.user)

しかし、「FieldError: キーワード 'owner' をフィールドに解決できません」というメッセージが表示されたので、所有者を sub_type に置き換えましたが、リストに購読者が入力されました。sub_types (製品) のリストである必要があります。

このリストを取得して、現在のユーザー (発行者) に属する sub_types (製品) のみを表示するにはどうすればよいですか?

4

1 に答える 1

1

だから私はここで私自身の質問に答えています。

def formfield_for_foreignkey(self, db_field, request, **kwargs):
   if db_field.name == "sub_type":
       subtype = Product.objects.all()
       if not request.user.is_superuser:
           kwargs["queryset"] = subtype.filter(publisher=request.user)
       else:
           kwargs["queryset"] = subtype
   return super(SimpleSubscriberAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

変更する必要がありました

kwargs["queryset"] = SimpleSubscriber.objects.filter(sub_type=request.user)

これに:

subtype = Product.objects.all()
    if not request.user.is_superuser:
        kwargs["queryset"] = subtype.filter(publisher=request.user)
    else:
        kwargs["queryset"] = subtype

私はForeignKeyオブジェクトのフィルタリングについて難しい方法を学んでいます。これが誰かの頭痛の種を救うことを願っています。

于 2012-07-06T16:50:35.323 に答える