python - 需要帮助以减少功能的复杂性或重复性
问题描述
嗨,有人可以帮助我降低下面提到的代码的复杂性,因为我是新手考虑可以提供很大的帮助,并提前感谢您在这方面帮助我的时间和考虑。
def update(self, instance, validated_data):
instance.email_id = validated_data.get('email_id', instance.email_id)
instance.email_ml_recommendation = validated_data.get('email_ml_recommendation',
instance.email_ml_recommendation)
instance.ef_insured_name = validated_data.get('ef_insured_name', instance.ef_insured_name)
instance.ef_broker_name = validated_data.get('ef_broker_name', instance.ef_broker_name)
instance.ef_obligor_name = validated_data.get('ef_obligor_name', instance.ef_obligor_name)
instance.ef_guarantor_third_party = validated_data.get('ef_guarantor_third_party',
instance.ef_guarantor_third_party)
instance.ef_coverage = validated_data.get('ef_coverage', instance.ef_coverage)
instance.ef_financials = validated_data.get('ef_financials', instance.ef_financials)
instance.ef_commercial_brokerage = validated_data.get('ef_commercial_brokerage',
instance.ef_commercial_brokerage)
# fixing bug of pipeline
instance.ef_underwriter_decision = validated_data.get('ef_underwriter_decision',
instance.ef_underwriter_decision)
instance.ef_decision_nty_fields = validated_data.get('ef_decision_nty_fields',
instance.ef_decision_nty_fields)
instance.ef_feedback = validated_data.get('ef_feedback', instance.ef_feedback)
instance.relation_id = validated_data.get('relation_id', instance.relation_id)
instance.email_outlook_date = validated_data.get('email_outlook_date',
instance.email_outlook_date)
instance.ef_decision_nty_fields = validated_data.get('ef_decision_nty_fields',
instance.ef_decision_nty_fields)
instance.ef_pl_est_premium_income = validated_data.get('ef_pl_est_premium_income',
instance.ef_pl_est_premium_income)
instance.ef_pl_prob_closing = validated_data.get('ef_pl_prob_closing',
instance.ef_pl_prob_closing)
instance.ef_pl_time_line = validated_data.get('ef_pl_time_line', instance.ef_pl_time_line)
instance.ef_pipeline = validated_data.get('ef_pipeline', instance.ef_pipeline)
instance.el_insured_margin = validated_data.get('el_insured_margin', instance.el_insured_margin)
instance.ef_last_updated = validated_data.get('ef_last_updated', instance.ef_last_updated)
instance.relation_id = validated_data.get('relation_id', instance.relation_id)
# CR3.2 Primium and basis point addition
instance.broker_email_id = validated_data.get('broker_email_id', instance.broker_email_id)
instance.premium = validated_data.get('premium', instance.premium)
instance.basis_points = validated_data.get('basis_points', instance.basis_points)
instance.basis_points_decision = validated_data.get('basis_points_decision',
instance.basis_points_decision)
embedded_json = validated_data.get('email_embedd', instance.email_embedd)
instance.email_embedd = json.dumps(embedded_json)
解决方案
如果必须将字典validated_data
中具有相应属性的所有项目instance
复制到该实例,则迭代这些项目并用于setattr
设置对象的相应属性instance
。
您似乎有一种特殊情况,需要将值字符串化为 JSON。因此,您需要特定的代码来处理这种情况:
def update(self, instance, validated_data):
for key, value in validated_data.items():
if hasattr(instance, key):
if key == "email_embedd": # special case
instance.email_embedd = json.dumps(value)
else:
setattr(instance, key, value)
逻辑错误...
对于特殊情况,您的代码中存在问题:
embedded_json = validated_data.get('email_embedd', instance.email_embedd)
instance.email_embedd = json.dumps(embedded_json)
如果在validated_data
没有密钥时执行此操作email_embedd
,则embedded_json
默认为instance.email_embedd
. 但是那个值已经是 JSON 编码的了!因此,如果您现在继续,json.dumps(embedded_json)
您将得到一个本身已再次被字符串化的 JSON 字符串!
上面提出的代码不会出现此问题。
推荐阅读
- api - 如何在 directus.io 中使用 group by 获取唯一项目
- kotlin - 在kotlin中完成异步功能后如何执行另一个功能?
- python - Python按值(深拷贝)从模块导入变量,而不是通过引用
- javascript - CryptoJS 的 crypto.createCipheriv 等价物是什么?
- javascript - 在 Gatsby 中添加预加载器
- api - 使用带有参数的 Flask Pyodbc 从 DB2 获取数据
- substrate - 如何打印construct_runtime在运行时构建的代码?
- excel - Excel Count不会空白不同格式的单元格
- php - PHP preg_split 按组 1 拆分
- powerbi - 如果测度大于零,则测度的幂 bi 和