2013-02-01 2 views
3

저는 장고를 처음 접해 보았습니다.장고 외래 키 할당

내가 예약 도구 작업과이 개 지금까지 모델이 있어요 : 특정 상황에서

#---------------------------------------------------------------------------------- 

class ReccurenceEvent(models.Model): 
    """ 
    A recurrence event defined an event which recurses over a period of time. The pattern of the recursion 
    is defined within the rec_type attribute. 
    """ 
    event_id = models.IntegerField(primary_key=True) 
    start_date = models.DateTimeField() 
    end_date = models.DateTimeField() 
    text = models.CharField(max_length=30) 
    rec_type = models.CharField(max_length=32) 
    event_length = models.BigIntegerField(null=True) 

#---------------------------------------------------------------------------------- 

class Event(models.Model): 
    """ 
    A an event represents an independent calender event. 
    If the event relates to a series, the p_id points to a particular ReccurencePattern 
    """ 
    event_id = models.IntegerField(primary_key=True) 
    start_date = models.DateTimeField() 
    end_date = models.DateTimeField() 
    text = models.CharField(max_length=30) 
    rec_type = models.CharField(max_length=32) 
    event_length = models.BigIntegerField(null=True) 

    event_pid = models.ForeignKey(ReccurenceEvent, null=True) 

을, 나는 이벤트에 상위 이벤트 ID (event_pid)를 할당 할하지만이 정수 값이어야합니다 객체에 대한 참조가 아닙니다.

다음 작업을 수행 할 때

e.event_pid = event_pid 

나는 다음과 같은 메시지가 얻을 :

Cannot assign "u'1359741862566'": "Event.event_pid" must be a "ReccurenceEvent" instance. 

확인을하지만, 함께 재발 인스턴스를 제공하는 경우 :

e.event_pid = ReccurenceEvent.objects.get(event_id = event_pid) 

나는 응답에 필요한 정수 값을 저장하지 않습니다.

누군가 내가 잘못 가고있는 부분을 지적 할 수 있습니까?

+0

모델 구성 방법이 잘못되었습니다. 장고는 자동으로 생성하기 때문에 기본 키를 넣을 필요가 없습니다. – catherine

답변

3

데이터베이스에서 외래 키는 정수 값입니다. 하지만 장고의 becuase은 event_id

e.event_pid.event_id

2

당신은 ID에 액세스 할 수 있습니다 통해 당신이 그것을 액세스 할 수 있어야 외래 키의 정수를 얻기 위해 객체의 관점이 아닌 숫자

에서 상호 작용할 수 있습니다 ORM e.event_pid.event_id를보고 RecurrenceEvent를 봅니다.

하지만 모델의 입력란을 잘못 입력했다고 생각합니다.

class ReccurenceEvent(models.Model): 

    event_id = models.IntegerField(primary_key=True) 
    start_date = models.DateTimeField() 
    end_date = models.DateTimeField() 
    text = models.CharField(max_length=30) 
    rec_type = models.CharField(max_length=32) 
    event_length = models.BigIntegerField(null=True) 

class Event(models.Model): 

    start_date = models.DateTimeField() 
    end_date = models.DateTimeField() 
    text = models.CharField(max_length=30) 
    rec_type = models.CharField(max_length=32) 
    event_length = models.BigIntegerField(null=True) 

    reccurance = models.ForeignKey(ReccurenceEvent, null=True) 

그런 다음 이벤트를 통해 RecurranceEvent의 속성에 액세스하면됩니다. 또한 명시 적으로 기본 키를 추가 할 필요가 없습니다. 장고가 해줄거야. .id.pk에 있습니다.

그래서 e.reccurance.id은보기/템플릿에 필요한 정수입니다.