嗨,我想在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
可以实现吗?
答案 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.