django-dynamic-fixture自我的外键

时间:2013-08-26 16:52:00

标签: django django-orm django-testing django-fixtures

我有一个看起来像这样的tests.py:

from django_dynamic_fixture import G,N
from person.models import Person
from django.test import TestCase

class EmailSendTests(TestCase):
    def test_send_email(self):
        person = N(Person)

My Person模型如下所示:

class Person(models.Model):
    person_no = models.IntegerField(primary_key=True)
    address =  models.ForeignKey('Address', db_column = 'address_no')
    guarantor = models.ForeignKey('Person', db_column = 'gperson_no')

当我运行测试时,我得到以下内容:

ValueError: Cannot assign None: "Patient.guarantor" does not allow null values.

如何创建一个具有指向自身的外键的django_dynamic_fixture对象?

1 个答案:

答案 0 :(得分:0)

根据我的理解,N函数不分配id,因为它不是在db中生成的,也许这就是原因:

https://github.com/paulocheque/django-dynamic-fixture/wiki/Documentation#wiki-n

其他的事情,而不是

guarantor = models.ForeignKey('Person', db_column = 'gperson_no')

你应该做

guarantor = models.ForeignKey('self', db_column = 'gperson_no')

https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey

希望这可以解决您的问题..

修改

我只是想通了,你需要为自引用字段提供null = True,以使其工作,这是有道理的,因为自引用必须在某处结束。