2011-10-26 1 views
3

に保存せずにメモリ内の関係を作り、私はこのような関係を持ついくつかのモデルを持っている:ジャンゴ:DB

class Item(model.Model): 
    name = models.CharField() 

class Group(models.Model): 
    item = models.ManyToManyField(Item) 

class Serie(models.Model): 
    name = models.CharField() 
    chart = models.ForeignKey(Chart) 
    group = models.ForeignKey(Group) 

class Chart(models.Model): 
    name = models.CharField() 

私はDBに保存せずに、その場でグラフオブジェクトを作成する必要があります。しかし、私はそれをすることはできません.Djangoは関係を割り当てるときにオブジェクトの主キーを使用しようとします。

私はちょうどGroup.add(Item())をDBにオブジェクトを保存することなく動作させたいと思っています。

これを回避する方法はありますか?

+0

「仮想子どもたち」を設定し、「オンザフライ」のすべての定義されたメソッドを使用することができ、私はあなたがチャートを渡していると推定表示するフロントエンド?なぜ普通のPythonオブジェクトを使うのではないのですか? –

+0

私はこれらのオブジェクト上に他のメソッドをいくつか持っているので、それらを2つのクラスに書き直さなくても使いたいです。 –

答えて

0

EDIT:ここで説明したアプローチは、DjangoがManyToMany関係に追加するのに十分ではないようです。

アイテムモデルのname属性にprimary_key=Trueunique=Trueを追加しようとしましたか? nameをオンザフライで作成する可能性がある場合は、Group.add(Item("item_name_here"))を実行してください。

add()がプライマリキーを使用したいので、あなたの方法は失敗したと思いますが、これはデフォルトでデータベースに保存されたときに割り当てられる自動インクリメントIDです。将来の読者のためにここに蘇る

+0

私はモデルの主キーを保持する必要があります。ちょうどDjantoが主キー私はオブジェクトのいずれかを保存しようとしていません。 –

+0

@FCその場合、私はそれが可能ではないと思います。 Btw。私は主キーを追加しても私は十分ではないと思います。 – Lycha

3

:私はクラスの内部関係およびオブジェクト天気を検査するプロパティを表しプライベート属性を定義することにより、このユースケースの周りに得ている

から取得することができますDBまたはメモリに常駐します。ここで

は簡単な例です:

class Parent(models.Model): 
    _children = [] 
    name = models.CharField(max_length=100) 

    @property 
    def children(self): 
     if _children: 
      return self._children 
     else: 
      return self.children_set.all() 

    def set_virtual_children(self, value): # could use a setter for children 
     self._children = value # Expose _children to modification 

    def some_on_the_fly_operation(self): 
     print(','.join([c.name for c in self.children])) 


class Children(models.Model): 
    parent = models.ForeignKey(Parent) 
    name = models.CharField(max_length=100) 

この方法で、私は