2013-02-01 85 views
3

我对Django来说很新,这让我很难过。Django外键分配

我在调度工具的工作,有两个型号至今:

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

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

你构建模型的方式是错误的。您不需要放置主键,因为django会自动生成它 – catherine

回答

3

如果你看看你的数据库中的外键是一个整数值!但监守Django的的ORM,你可以在对象的条件,而不是数字

互动通过event_id

e.event_pid.event_id

2

您可以访问ID来获得ForeignKey的的整数,你应该能够访问它通过查看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的属性。另外,您不需要明确添加主键。 Django为你做。它可在.id.pk

因此e.reccurance.id将是您的视图/模板中需要的整数。