[英]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.