使 UpdateView 接受 urls.py 中的加密 pk 和 return 解密 pk 后用于编辑的模型对象

Make UpdateView accept an encrypted pk in urls.py and return a model object for editing after decrypting the pk

我有一个简单的工作 class 基于继承 UpdateView 的视图。

class UpdateModel(UpdateView):
    model = ModelName
    fields = ['field_1' , 'field_2' , ]
    template_name_suffix = '_update_form'
    success_url = reverse_lazy('home')

和映射回此视图的 url

url(r'^edit/(?P<pk>[\w-]+)$' , UpdateModel.as_view() , name="update_model"),

现在我面临的 问题 是我通常在将 PK 值发送到外部之前对其进行加密(因为它们很敏感) .当我收到它们时,我将它们解密以获取模型对象。

加密过程的简要工作。

def pk_encoder(pk):
    int_pk = int(pk)
    hashids = Hashids("MySalt")
    encoded_pk = hashids.encode(pk_id)
    return encoded_pk

ans 同样,我使用 hashids.decode('string') 来获取我的模型对象。

但是在 UpdateView 中没有这方面的规定(据我所知)。在 urls.py 它只是接受 pk id 到 return 更新模型的相关表格。 我知道我必须以某种方式覆盖 UpdateView 或它的任何功能,但无法弄清楚如何。我可以知道如何编辑 UpdateView

的这个功能吗

提前致谢。

这是一个简单的调整。阅读源代码 here 后,我发现我只需扩展

的功能即可

def get_object(self)

SingleObjectMixin(ContextMixin) class.

中声明

代码看起来像,

class UpdateModels(UpdateView):
    #declare model, fields, template_name etc.

    def get_object(self):
        #decode and get the object in the variable desired_model_object 
        return desired_model_object

希望这对某人有所帮助。