Django:带factory的onetoone字段\u boy:唯一约束失败

2024-10-04 03:28:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试着和工厂男孩一起为这些车型制造工厂:

class Course(models.Model):
    group = models.OneToOneField(Group)
    title = models.CharField(max_length=1024)


class CourseInfo(models.Model):
    course = models.OneToOneField(Course, related_name='info')
    starttime = models.TimeField(null=True, blank=True)
    endtime = models.TimeField(null=True, blank=True)

以下是我的工厂:

^{pr2}$

现在,当我调用CourseFactory()CourseInfoFactory()时,我得到一个IntegrityError:

IntegrityError: UNIQUE constraint failed: courseaffils_courseinfo.course_id

我的工厂怎么了?我怎样才能解决这个问题?在

如果我在CourseInfoFactory上执行course = factory.RelatedFactory('courseaffils.tests.factories.CourseFactory'),那么我会得到如下错误:

IntegrityError: NOT NULL constraint failed: courseaffils_courseinfo.course_id

如果您需要更多详细信息,下面是我正在使用的实际代码:

https://github.com/ccnmtl/django_courseaffils/blob/master/courseaffils/models.py


Tags: truemodelmodels工厂nullclassblankcourse
2条回答

问题是CourseFactory()已经创建了一个CourseInfo对象。我只删除了info = factory.RelatedFactory(CourseInfoFactory, 'course')行就解决了这个问题,现在CourseInfo工厂是不必要的-我可以通过在course.info处获取创建的对象来测试CourseInfo。在

只需将django_get_或_create添加到课程信息工厂的元类中即可:

class Meta:
    django_get_or_create = ('group',)

此解决方案避免了在字段中存在唯一约束的问题,即获取对象,而不是创建对象(如果存在)。在

您可以在这里查看:https://github.com/FactoryBoy/factory_boy/blob/v2.5.2/factory/django.py#L133-L139

相关问题 更多 >