2012-07-03 50 views
1

我读过文档并尝试实现默认表单的覆盖,以仅显示属于我的管理员中当前用户(Publisher)的项目。我有一个名为sub_type的对象的SimpleSubscriber模型,它是模型Product的一个ForeignKey。还有一个发布者模型,SimpleSubscriber和Product都有称为发布者的ForeignKey对象。在我的admin.py我有这样的:Django-Admin替代外键字段的默认表单

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(产品)列表。

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

+0

所以我在这里回答我自己的问题。 DEF formfield_for_foreignkey(个体,db_field,请求,** kwargs): 如果db_field.name == “sub_type”: 亚型= Product.objects.all() 如果不是request.user.is_superuser: kwargs [“查询集“] = subtype.filter(publisher = request.user) else: kwargs [”queryset“] = subtype return super(SimpleSubscriberAdmin,self).formfield_for_foreignkey(db_field,request,** kwargs) –

回答

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的对象艰辛的道路。希望这可以帮助人们解决头痛问题。