在 Django 管理 ListView 中,我想隐藏没有名称的产品。我只是在 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
product object with primary key u'123' does not exist.
这个问题有解决办法吗?如果可能,不向 ListView 添加自定义过滤器。
请您参考如下方法:
好吧,你可以覆盖 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
这没有记录但可以工作。不过,标准方法是使用自定义过滤器。
