django update_or_create(),看看有什么更新

时间:2017-05-04 10:54:25

标签: django django-models django-views

我的django应用使用update_or_create()来更新一堆记录。在某些情况下,大量记录中的更新实际上很少,并且知道在这些记录中更新了哪些会更好。是否有可能知道更新的内容(即值已更改的字段)?如果没有,是否有人有解决方法的想法?

这将从shell中调用,因此理想情况下,在update_or_create()更改之前提示进行确认会很好,但如果不是这样,那么知道什么变了也会有所帮助。

更新(更多上下文):我想在此提供更多背景信息。这个Django应用程序中的数据通过各种方式(通过网站上的用户,通过管理页面,通过脚本(从shell运行)填充来自csv等的数据)进行更新。上面的问题主要对于从csvs更新数据的shell脚本很重要,因此数据库/触发/信号级别的解决方案在这里可能没有帮助(我猜)。

2 个答案:

答案 0 :(得分:1)

  

这将从shell调用,所以理想情况下它会很好   在更改值之前提示确认

不幸的是,数据库并不是那样的。提供此功能的应用程序负责。并且django不是一个应用程序。但是,您可以使用django编写提供此功能的应用程序。

至于找出对象是否已更新或创建,return value给你的是什么。一个元组,其中第二个值是更新或创建的标志

答案 1 :(得分:0)

这就是我最终做的事情:

for row in reader:
    school_obj0, created = Org.objects.get_or_create(school_id = row[0])

    if (school_obj0.name != row[1]):
        print (school_obj0.name, '==>', row[1])
        confirmation = input('proceed? [y/n]: ')
        if (confirmation == 'y'):
                school_obj1, created = Org.objects.update_or_create(
                                school_id = row[0], defaults={"name": row[1],})

很高兴知道这种方法的改进(请参阅问题中的更新以及更多背景信息)