使UpdateView接受urls.py中的加密pk,并在解密pk后返回一个模型对象进行编辑

时间:2017-07-13 05:45:37

标签: django django-models django-views django-generic-views

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

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

以及映射回此视图的网址

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 以返回更新模型的相关表单。 我知道我必须以某种方式覆盖UpdateView或其任何功能,但无法弄清楚如何。我是否知道如何编辑UpdateView的此功能

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

的功能

def get_object(self)

SingleObjectMixin(ContextMixin)类中声明。

代码看起来像,

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

希望这有助于某人。