我有一个简单的基于工作类的视图继承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的此功能
提前致谢。
答案 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
希望这有助于某人。