2013-08-26 27 views
2

我有一个tests.py,看起来像这样:Django的动态夹具外键自

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) 

我一个人的模型是这样的:

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

据我了解函式N不分配ID,因为它不是在数据库中产生,也许这就是原因所在:

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

希望这将解决您的问题..

编辑

我想通了,你需要自我引用领域提供空=真,使其工作,这是有道理的,因为自我引用必须在某个地方结束。

+0

感谢您的信息 - 我终于明白了原因,但我不确定如何解决此问题。 – Trewq

+0

@Trewq我已更新我的回答 – mariodev

+0

自引用必须为null = True。另外,请检查“number_of_laps”属性。这对于这种关系来说非常完美。 (http://django-dynamic-fixture.readthedocs.org/en/latest/data.html#number-of-laps) –