2011-11-08 17 views
0

我在使用Django的save()方法時遇到了一些麻煩。django save()方法在函數內部調用時什麼也不做

1/I有這個簡單的模型:

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 

該代碼運行時沒有錯誤,但我沒有將模型保存到第e數據庫時,從第2步中的條件調用autoAddApplication函數。

我試圖通過直接將URL映射到此函數來直接調用此'autoAddApplication'函數,然後它可以工作,並且我的模型保存在D B。

我在這裏完全不解。當我在另一個函數中調用這個'autoAddApplication'函數時,爲什麼它不起作用?任何幫助將不勝感激。


編輯 我終於發現我做錯了什麼。 在後面的第2步中,我有一個u.save(),它確實保存了u(因此覆蓋了我在autoAddApplication函數中所做的更改)。 我通過傳遞給autoAddApplication函數解決了這個問題。

無論如何感謝您的幫助。

+3

[PEP 8](http://www.python.org/dev/peps/pep-0008/)希望您將'userId'更改爲'user_id','appInstance'更改爲'app_instance','autoAddApplication ''auto_add_application'和'instanceMap'到'instance_map'。 (並且它也希望您將'get_object_or_404(User,userId = ...)'更改爲'... userId = ...'。) –

+0

您是否正在使用正確的'User'模型?請記住,內置的用戶類也被命名爲'User',您不會導入? –

+0

你確定函數被調用嗎? – DrTyrsa

回答

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 
0

嘗試更改類名從UserMyUser或類似的東西,你可以是具有Django中定義的User模型煩惱。