4

私は Django にかなり慣れていませんが、これには困惑しています。

私はスケジューリングツールに取り組んでおり、これまでに2つのモデルがあります:

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

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)

応答に必要な整数値を保存していません。

誰かが私が間違っているところを指摘できますか?

4

2 に答える 2

3

データベースを見ると、外部キーは整数値です! ただし、django orm のおかげで、数値ではなくオブジェクトの観点から対話できます

ForeignKey の整数を取得するには、次の方法でアクセスできる必要がありますevent_id

e.event_pid.event_id

于 2013-02-01T18:23:45.883 に答える
2

e.event_pid.event_id を見ると、ビュー内の RecurrenceEvent の ID にアクセスできます。

しかし、モデルのフィールドの名前を間違えていると思います。

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な整数になります。

于 2013-02-01T18:24:52.073 に答える