Django Admin自定义网址路径

时间:2019-07-09 03:47:51

标签: django django-models django-views django-admin

嗨,我想在django管理员中创建一个自定义网址。

编辑对象时的默认URL是。

http://localhost:8000/admin/cart/cart_id/change
In my admin
http://localhost:8000/admin/cart/1/change

我有一个称为购物车唯一ID的字段。我想创建一个行为与django admin中的编辑URL相似的自定义URL。

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

可以实现吗?

2 个答案:

答案 0 :(得分:1)

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

your_field = models.TypeOfField(primary_key=True)

如果您不想这样做,则可以覆盖模型管理员的get_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

答案 1 :(得分:0)

在模型中,如果使用自己制作的主键代替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.