2011-09-26 2 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는 사용자 프로필에 대한 하나의 foreign 키이다.

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)을 시도했다 : 테스트 목적을 위해 내가 이름 a

시작 내가 파이썬 쉘에서 다음 코드를 작성하는 사용자의 지점을 업데이트하고 싶었다 다음과 같은 오류 얻을 : 당신이 장고의 기본 모델 관리자의 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 Django 용 문서는 기본 날짜를 현재 시간으로 설정하는 방법에 대한 몇 가지 팁을 제공합니다.

희망이 도움이됩니다.