2011-09-26 32 views
0

以下是models.py:更新外鍵的項目殼

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    belongs_to_user_category = models.ForeignKey(UserCustomCategory, null=True, blank=True) 

class UserHistory(models.Model): 
    date_time = models.DateTimeField() 
    user = models.ForeignKey(UserProfile, null=True, blank=True) 
    points_earned = models.DecimalField(max_digits=5, decimal_places=3) 

可以清楚地看出,userhistory是一個外鍵,用戶配置。對於測試目的,我想更新其名稱以a

開始我寫在Python外殼下面的代碼的用戶的要點:

from myapp.models import * 
uobj = UserProfile.objects.all() 
for i in uobj: 
    if i.user.username[0] == 'a': 
     b = UserHistory.objects.create(user=i) 
     b.points_earned = random.random(10, 100) 
     b.date_time = datetime.datetime.now() 
     b.save() 

我也有試過b = UserHistory.objects.get_or_create(user=i)有同樣的錯誤 和我出現以下錯誤:當您使用在Django默認的模型管理器的create方法

ERROR: An unexpected error occurred while tokenizing input 
The following traceback may be corrupted or invalid 
The error message is: ('EOF in multi-line statement', (160, 0)) 

ERROR: An unexpected error occurred while tokenizing input 
The following traceback may be corrupted or invalid 
The error message is: ('EOF in multi-line statement', (13, 0)) 

ERROR: An unexpected error occurred while tokenizing input 
The following traceback may be corrupted or invalid 
The error message is: ('EOF in multi-line statement', (63, 0)) 

ERROR: Internal Python error in the inspect module. 
Below is the traceback from this internal error. 

Traceback (most recent call last): 
    File "/usr/local/lib/python2.6/dist-packages/IPython/ultraTB.py", line 667, in text 
    locals,formatvalue=var_repr)) 
    File "/usr/lib/python2.6/inspect.py", line 875, in formatargvalues 
    specs.append(strseq(args[i], convert, join)) 
    File "/usr/lib/python2.6/inspect.py", line 830, in strseq 
    return convert(object) 
    File "/usr/lib/python2.6/inspect.py", line 872, in convert 
    return formatarg(name) + formatvalue(locals[name]) 
KeyError: 'connection' 

IPython's exception reporting continues... 

--------------------------------------------------------------------------- 
IntegrityError       Traceback (most recent call last) 


IntegrityError: (1048, "Column 'date_time' cannot be null") 
+0

您的用戶級別設置如何? –

回答

1

,它也將試圖創建一個實例到數據庫並保存它。你可以通過兩種方式來做到這一點,但我會告訴你你的方法可以做什麼,這可能有助於理解。

首先,您需要創建一個UserHistory對象,但不實際保存它。這是通過簡單的實例化模型類與任何默認值,你想做到:

b = UserHistory(user=i) 

之後,您可以設置其他屬性。

b.points_earned = random.randint(10, 100) 
b.date_time = datetime.datetime.now() 
b.save() 

這會工作。因爲您在設置date_time後現在節省了b

有辦法改善這個當然,你可以簡單地創建一個呼叫的一切,因爲你在一個合乎邏輯的步驟做,就像這樣:

b = UserHistory.objects.create(
    user=i, 
    points_earned=random.randint(10, 100), 
    date_time=datetime.datetime.now(), 
) 

您可以進一步通過閱讀提高本DateField docs for Django,它會給你一些關於如何將默認日期設置爲當前時間的提示。

希望這會有所幫助!