繁体   English   中英

Django Admin - 更改模型页面 - 使用 UUID 而不是 ID 的 URL

[英]Django Admin - Change Model Page - URLs with UUID instead of ID

我有一个BaseModel类,我的所有模型都使用uuid继承,如下所示:

class BaseModel(models.Model):

    ''' Extension of base model class '''
    
    uuid = models.UUIDField(unique=True, default=uuid4, editable=False)
    ...

如何更改 django 管理员行为,以便可以使用对象 UUID 而不是 ID 访问实例的更改页面?

目前: .../admin/my_app/my_model/7/change/

首选: .../admin/my_app/my_model/b6a98f1d-6b26-4399-8d68-62ec1ce12c41/change/

我已经管理了这个解决方案,而无需将UUID设置为主键:

from django.contrib import admin


class BaseModelAdmin(admin.ModelAdmin):

    """ base model admin with custom behavior """

    def get_object(self, request, object_id, from_field=None):
        """ get object based on uuid insead of id """

        # get queryset, model, field:
        queryset = self.get_queryset(request)
        model = queryset.model
        field = model._meta.get_field('uuid') if from_field is None else model._meta.get_field(from_field)
        
        # try to return instance:
        try:
            object_id = field.to_python(object_id)
            return queryset.get(**{field.name: object_id})
        except:
            return None

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM