Пользовательский путь к Django Admin - PullRequest
0 голосов
/ 09 июля 2019

Привет! Я хотел бы создать собственный URL в моем администраторе django.

URL-адрес по умолчанию при редактировании объекта:

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

У меня есть поле с уникальным идентификатором корзины. Я хочу создать собственный URL-адрес, который будет вести себя аналогично URL-адресу редактирования в django admin.

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

Возможна ли эта реализация?

Ответы [ 2 ]

1 голос
/ 09 июля 2019

По умолчанию администратор будет использовать первичный ключ вашей модели для URL-адресов администратора, вы можете установить это уникальное поле в качестве первичного ключа модели для достижения этой цели.

your_field = models.TypeOfField(primary_key=True)

Если вы не хотите этого делать, вы можете переопределить get_object метод вашей модели admin

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
0 голосов
/ 09 июля 2019

В вашей модели, если вы используете первичный ключ, созданный вами, вместо идентификатора django, он будет работать.

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