コード例 #1
0
    def set_id_list_with_qty(main: BaseModel, arr: List,
                             Class: Type[BaseModel], Relation: Type[BaseModel],
                             attr1: str, RelationAttr1: pw.ForeignKeyField,
                             attr2: str, RelationAttr2: pw.ForeignKeyField):
        try:
            toAdd, toUpdate = [], []
            for a in arr:
                item = Class.get_by_id(a['id'])
                existingRelation = Relation.get_or_none(
                    RelationAttr1 == main, RelationAttr2 == item)
                if not existingRelation:
                    toAdd.append({
                        attr1: main,
                        attr2: item,
                        'qty': a['qty'],
                        'unit': a['unit'],
                        'remark': a['remark']
                    })
                elif a['qty'] != existingRelation.qty or a[
                        'unit'] != existingRelation.unit:
                    existingRelation.qty = str(a['qty'])
                    existingRelation.unit = str(a['unit'])
                    toUpdate.append(existingRelation)

            # Adding
            if len(toAdd) > 0:
                Relation.insert_many(toAdd).execute()

            # Updating
            if len(toUpdate) > 0:
                Relation.bulk_update(toUpdate,
                                     fields=[Relation.qty, Relation.unit])

            # Deleting
            idList = [a['id'] for a in arr]
            toDel = Relation.delete().where(RelationAttr1 == main,
                                            RelationAttr2.not_in(idList))
            toDel.execute()
            return True
        except Exception as e:
            raise e
コード例 #2
0
    def set_id_list(main: BaseModel, idList: List[str], Class: Type[BaseModel],
                    Relation: Type[BaseModel], attr1: str,
                    RelationAttr1: pw.ForeignKeyField, attr2: str,
                    RelationAttr2: pw.ForeignKeyField):
        try:
            toAdd = []
            for idItem in idList:
                item = Class.get_by_id(idItem)
                existingRelation = Relation.get_or_none(
                    RelationAttr1 == main, RelationAttr2 == item)
                if not existingRelation:
                    toAdd.append({attr1: main, attr2: item})

            # Adding & Delete
            if len(toAdd) > 0:
                Relation.insert_many(toAdd).execute()
            toDel = Relation.delete().where(RelationAttr1 == main,
                                            RelationAttr2.not_in(idList))
            toDel.execute()
            return True
        except:
            return False