在 activity 中更改生产交换

Change production exchange in an activity

我们如何用 activity 中已经存在的技术圈交换替换 activity 中的生产交换?

在 activity act 中,我尝试通过删除现有的生产交换 existing_prod_exc 然后使用 new_prod_exc=act.new_exchange(input=act.key,output=act.key,type='production') 创建一个新的生产交换来做到这一点,但我没有'知道如何将现有交易所techno_exc的所有交易所特征"copy"转化为new_prod_exc.

谢谢你的帮助。

可以通过多种方式更改交换类型;您可以直接编辑 SQLite 数据库中的 type 列,或使用 ExchangeDataset 对象,但我猜您想使用主界面。在这种情况下,更改交换类型很容易:

some_exc = next(iter(some_activity.technosphere()))
some_exc['type'] = 'production'
some_exc.save()

回想一下,输入和输出之间的唯一区别是 sign of the value in the technosphere matrix;因此,您可以通过将交换金额的符号乘以 -1 来完成同样的事情。

我猜你还想删除现有的生产交换(你应该先这样做,原因很明显!):

for exc in some_activity.production():
    exc.delete()

与任何破坏性操作一样,最好先在实际数据的副本上进行尝试;您可以使用 projects.copy_project() 快速创建一个测试项目。

您可以直接更改您感兴趣的交易所并保存:

exc_to_become_production['type'] = 'production'
exc_to_become_production['input'] = exc_to_become_production['output']
exc_to_become_production.save()

这样做将导致两次生产交换。然后,您可以根据需要删除现有的生产交换。