django 前后端数据映射转换问题

2020-02-27 11:16:25 +08:00
 achilles111
django+vue。数据库中一个字段有固定三个取值。例如分别是 增加、删除、修改。我在数据库中存放的时候是对应英文 add delete modify。前端界面展示的是汉字(也就是增加、删除、修改)。
那么我在后端从数据库里取出数据的时候,是英文,必须转换一遍传到前端,才能直接使用。如果前端数据有更新,传回来,那我把新的数据存入数据库时,又需要转换一遍。
django 自带模板中好像可以自动转换写了 choice 的字段,但是现在前端是 vue,就没法儿用。目前都是在后端用字典做映射。
请问各位大佬,有没有更快捷的转换映射方式。
2218 次点击
所在节点    Python
6 条回复
chenstack
2020-02-27 11:27:14 +08:00
前端做映射,传回后端用对应英文
wuwukai007
2020-02-27 11:30:59 +08:00
这应该前端做,个人觉得
superrichman
2020-02-27 11:40:06 +08:00
既然前后端都分离了,前端的展示应该让前端去做吧。
blessyou
2020-02-27 12:34:59 +08:00
前端做 我怕你到时候还得来一套繁体 map
siteshen
2020-02-27 12:39:15 +08:00
在后端做的话,可以额外加个字段,API 调用时用原来值,展示时用 display_xxx 属性。

# model:
class Post:
category = models.CharField(max_length=100, choices=(...))


# API 设计:
{"category": "finance | art", "display_category": "财经 | 艺术"}

# 辅助函数,从 choices 里解析出对应的值:
def get_display_value(post, field='category'):
# model = post.__class__.model
# choices = ...
# [c[1] c for c in choices if c[0] === getattr(post, field')][0]


# 进一步优化的话,可以写个 decorator 完成转换工作:
@display_fields('category')
def list_post(request, response):
# 原来的逻辑

# 以上伪代码未考虑错误处理,请自行完善。
achilles111
2020-02-28 10:26:39 +08:00
感谢诸位大佬,目前暂定让前端做转换了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/647964

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX