Django管理员自定义Url路径

Django管理员自定义Url路径,django,django-models,django-views,django-admin,Django,Django Models,Django Views,Django Admin,嗨,我想在我的django管理员中创建一个自定义url http://localhost:8000/admin/cart/uniq_id/change http://localhost:8000/admin/cart/H2KPAT/change 编辑对象时的默认URL为 http://localhost:8000/admin/cart/cart_id/change In my admin http://localhost:8000/admin/cart/1/change 我有一个名为cart

嗨,我想在我的django管理员中创建一个自定义url

http://localhost:8000/admin/cart/uniq_id/change
http://localhost:8000/admin/cart/H2KPAT/change
编辑对象时的默认URL为

http://localhost:8000/admin/cart/cart_id/change
In my admin
http://localhost:8000/admin/cart/1/change
我有一个名为cart unique id的字段。我想创建一个自定义url,其行为类似于django admin中的编辑url

http://localhost:8000/admin/cart/uniq_id/change
http://localhost:8000/admin/cart/H2KPAT/change

这个实现可能吗?

在您的模型中,如果您使用自己制作的主键而不是django id,它将工作

class Cart(models.Model):
    my_key = models.IntegerField(primary_key=True)
    # my_key will be show in the url in the admin panel.

默认情况下,管理员会将模型的主键用于管理员URL,您可以将此唯一字段设置为模型的主键以实现此目的

your_field = models.TypeOfField(primary_key=True)
如果您不想这样做,可以重写模型管理员的
get\u object
方法

def get_object(self, request, object_id, from_field=None):
    queryset = self.get_queryset(request)
    model = queryset.model
    # This would usually default to the models pk
    field = model._meta.get_field('you_field') if from_field is None else model._meta.get_field(from_field)
    try:
        object_id = field.to_python(object_id)
        return queryset.get(**{field.name: object_id})
    except (model.DoesNotExist, ValidationError, ValueError):
        return None