1

我已阅读文档并尝试实现对默认表单字段的覆盖,以仅在我的管理员中显示属于当前用户(发布者)的项目。我有一个 SimpleSubscriber 模型,其中包含一个名为 sub_type 的对象,它是模型 Product 的 ForeignKey。还有一个 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:无法将关键字'所有者'解析到字段中”,所以我用 sub_type 替换了所有者,但是用订阅者填充了列表。它应该是子类型(产品)的列表。

如何让此列表仅显示属于当前用户(发布者)的子类型(产品)?

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 回答