2016-03-20 6 views
1

Ich bin die typische Laufzeitfehler der Referenzierung FKs Tests selbst immer django mit gefälschten Objekte:Umgang mit selbstreferentiellen Fremdschlüsseln; Modell Mama

... 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 

das Modell:

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) 

Die docs sind spärlich auf sich selbst als FK verweisen. Wie kannst du eine Instanz fälschen, die auf einer von sich mit Modelmommy benötigt? Danke

Antwort

1

Zunächst einmal denke ich, dass Sie das parent Feld nullfähig machen sollten; parent = models.ForeignKey('self', db_column='parent_id', null=True, blank=True) Dies bedeutet, dass Sie ein Basisobjekt haben, von dem aus die Referenzierung gestartet werden kann.

Mit dem Modell Mommy können Sie zuerst einen falschen Eltern erstellen und dann den Eltern dem Kind zuweisen.

parent_item_group = mommy.make(ItemGroup) 
child_item_group = mommy.make(ItemGroup, parent=parent_item_group) 
Verwandte Themen