在Django管理列表视图中,我想要隐藏没有名称的产品。我只是在get_query_set()方法中将它们排除在外。
def get_queryset(self, request):
qs = super(ProductAdmin, self).get_queryset(request)
return qs.exclude(name=None)
这是完美的,但我希望能够在管理详细信息页面中访问没有名称的产品(带有直接链接)。 当它尝试这个时,我有一个错误,因为它过滤了查询集中的产品: http://127.0.0.1/product/123
主键u'123'的产品对象不存在。
这个问题有解决方法吗?如果可能,不向列表视图添加自定义过滤器。
答案 0 :(得分:1)
好吧,你可以覆盖get_object
def get_object(self, request, object_id, from_field=None):
"""
Returns an instance matching the field and value provided, the primary
key is used if no field is provided. Returns ``None`` if no match is
found or the object_id fails validation.
"""
model = product
field = model._meta.pk if from_field is None else model._meta.get_field(from_field)
try:
object_id = field.to_python(object_id)
return model.objects.get(**{field.name: object_id})
except (model.DoesNotExist, ValidationError, ValueError):
return None
这是没有记录的,但可以使其工作。但标准方法是使用自定义过滤器。
答案 1 :(得分:0)
您可以查看自己是否在change
或changelist
def get_queryset(self, request):
qs = super(ProductAdmin, self).get_queryset(request)
if request.resolver_match.url_name == "APPNAME_MODELNAME_changelist":
return qs.exclude(name=None)
return qs
Django版 :1.9