Django-Admin覆盖外键字段的默认表单字段

时间:2012-07-03 21:59:06

标签: django-admin foreign-keys

我已阅读文档并尝试实现默认表单字段的覆盖,以仅显示属于我的管理员中当前用户(发布者)的项目。我有一个SimpleSubscriber模型,其对象名为sub_type,它是Model Model的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替换了所有者,但是用订阅者填充了列表。它应该是sub_types(Products)的列表。

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

1 个答案:

答案 0 :(得分: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对象的艰难方法。希望这能让人头疼。