微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

需要帮助减少功能的复杂性或重复

如何解决需要帮助减少功能的复杂性或重复

嗨,有人可以帮助我降低下面提到的代码的复杂性,因为我是新手,我需要它来减少代码量并改进代码并提高简单性并减少整体编码中的重复在这方面的帮助会很有帮助,并提前感谢您在这方面帮助我的时间和考虑。

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 字符串,该字符串本身已再次被字符串化!

上面提出的代码不会出现这个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。