django中的save()方法在函数内调用时无效

0 投票
2 回答
580 浏览
提问于 2025-04-17 05:51

我在使用Django的save()方法时遇到了一些问题。

1 / 我有一个简单的模型:

class User (models.Model):
    userId = models.IntegerField()
    appInstance = models.TextField(null=True, blank=True)

2 / 然后在一个视图中,我检查appInstance是否存在,如果不存在,我就调用一个函数:

if not u.appInstance:
    instance = autoAddApplication(request)

3 / 这个autoAddApplication函数定义如下:

def autoAddApplication(request):

    session = request.session
    user = get_object_or_404(User, userId = session['user_id'])
    ## do stuff here and end up with an 'instanceMap' dictionary

    user.appInstance = simplejson.dumps(instanceMap)
    user.save()
    return instanceMap

代码运行没有错误,但当我从第2步的条件中调用autoAddApplication函数时,模型并没有保存到数据库里。

我尝试直接通过将一个URL映射到这个函数来调用'autoAddApplication',这样就能正常工作,并且我的模型成功保存到了数据库。

我对此感到非常困惑。为什么当我从另一个函数中调用'autoAddApplication'时,它就不工作呢?任何帮助都将不胜感激。


编辑 我终于找到了我做错的地方。 在第2步中,我有一个u.save(),这确实保存了u(因此覆盖了我在autoAddApplication函数中所做的更改)。 我通过将u传递给autoAddApplication函数解决了这个问题。

无论如何,感谢你的帮助。

2 个回答

0

在视图里面把autoAddApplication当作一个私有函数来用怎么样?

    def _auto_add_application(session):
        user = get_object_or_404(User, user_id = session['user_id'])
        user.app_instance = simplejson.dumps(instance_map)
        user.save()
        return instance_map
1

试着把类的名字从 User 改成 MyUser 或者其他类似的名字,可能是你在使用Django时遇到了 User 模型的问题。

撰写回答