我收到了使用伪造对象自引用FK测试django的典型运行时错误:

... 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伪造一个需要自身的实例?谢谢

最佳答案

首先,我认为您应该使parent字段可为空; parent = models.ForeignKey('self', db_column='parent_id', null=True, blank=True)意味着您将拥有一个从其开始引用的基础对象。

使用模型妈妈,您可以首先创建一个假父母,然后将该父母分配给孩子。

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

关于python - 处理自指外键;模特妈妈,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36115219/

10-13 02:29