我有一个看起来像这样的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对象?
答案 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,以使其工作,这是有道理的,因为自引用必须在某处结束。