我已阅读文档并尝试实现默认表单字段的覆盖,以仅显示属于我的管理员中当前用户(发布者)的项目。我有一个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(产品)?
答案 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对象的艰难方法。希望这能让人头疼。