save()不会更新monoengine中的datetime字段

时间:2017-06-29 01:13:21

标签: python mongoengine

我是mongoengine的新手,但这对我没有任何意义,当我调用my_update()函数时,用户的updated_at字段不会更新,但其他字段却没有。 这是我的模特:

class User(db.Document):
    username = db.StringField(required=True, unique=True, max_length=20)
    created_at = db.DateTimeField(default=datetime.datetime.utcnow())
    updated_at = db.DateTimeField()
    friend_list = ListField(StringField(max_length=100))

当我执行保存时,它会正确保存新的friend_list,但它保留旧的updated_at字段,并且永远不会再次更新。

def my_update(user_id):
    form = UserForm()
    user = User.objects.get_or_404(id=user_id)
    user.friend_list = insert_random_data()
    user.updated_at = datetime.datetime.utcnow()
    user.save()
    return users = User.objects.order_by('-updated_at', '-created_at')

所以如果我多次运行my_update,它每次都会更新friend_list,但update_at字段保持不变!我不知道我很好奇为什么它会像这样!

1 个答案:

答案 0 :(得分:0)

对于有同样问题的人, 我想我必须使用Atomic Update()而不是Save(),因为save()在完成之前不会阻塞,我的视图函数会在保存之前询问对象。

所以底线是,Save is Evil(大部分)。只是使用原子更新!

像这样

User.objects(id=user.id).update(set__update_at=datetime.datetime.utcnow(), push__friend_list="ss")