2016-03-20 15 views
1

は偽のオブジェクトとジャンゴ:自己参照外部キーを扱う。私は自己参照FKSテストの典型的なランタイムエラーを取得していたモデルのママ

... last 4 frames repeated, from the frame below ... 

/home/cchilders/.virtualenvs/clientsite/lib/python3.4/site-packages/model_mommy/mommy.py in make(model, _quantity, make_m2m, **attrs) 
    96   return [mommy.make(**attrs) for i in range(_quantity)] 
    97  else: 
---> 98   return mommy.make(**attrs) 
    99 
    100 

RuntimeError: maximum recursion depth exceeded while calling a Python object 

モデル:

class ItemGroup(models.Model): 
    parent = models.ForeignKey('self', db_column='parent_id') 
    name = models.CharField(max_length=255) 
    value = models.CharField(max_length=255, unique=True) 

    class Meta: 
     db_table = u'item_groups' 

    def __str__(self): 
     return self.value 

    def __repr__(self): 
     return '<{} {}: {}>'.format(self.__class__.__name__, self.pk, self.value) 

ドキュメントがFKとして自分自身を参照するにスパースです。 modelmommyを使用して自分自身に必要なインスタンスをどのように偽装できますか?ありがとうございます

答えて

1

まず、parentフィールドをnullにする必要があります。 parent = models.ForeignKey('self', db_column='parent_id', null=True, blank=True)これは、参照を開始するベースオブジェクトがあることを意味します。

モデルmommyでは、最初に偽の親を作成してから親を子に割り当てることができます。

parent_item_group = mommy.make(ItemGroup) 
child_item_group = mommy.make(ItemGroup, parent=parent_item_group) 
関連する問題