无法生成抽象工厂的实例(Djangofactory_boy)

问题描述 投票:0回答:1

此工厂:

`import factory
from .models import *
from factory.faker import *

FAKE = faker.Faker(locale = 'ru_RU')

class RoleFactoryManager(factory.django.DjangoModelFactory):
    
    class Meta:
        model = Role
        abstract = False
    role_name = 'manager'


class RoleFactoryAdmin(factory.django.DjangoModelFactory):
    class Meta:
        model = Role
        abstract = False
    role_name = 'admin'

class RoleFactoryUser(factory.django.DjangoModelFactory):
    
    class Meta:
        model = Role
        abstract = False
    role_name = 'user'

class ClientFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Client
        abstract = False

    client_surname = factory.Faker('second_name')
    client_name = factory.Faker('first_name')
    client_date_of_registration = factory.Faker('date')
    client_email = factory.LazyAttribute(lambda a: '{}.{}{}@gmail.com'.format(a.client_surname, a.client_name, a.client_id).lower())
    client_phone = factory.Faker('phone_number')
    client_photo = ('/images/profile_photo.png')
`

此型号:

`from django.db import models

class Role(models.Model):
    role_id = models.AutoField(primary_key=True)
    role_name = models.CharField(max_length=30, null=False)

class Client(models.Model):
    client_id = models.AutoField(primary_key=True)
    client_surname = models.CharField(max_length=30, null=False)
    client_name = models.CharField(max_length=30, null=False)
    client_date_of_registration = models.DateField(null=False)
    client_email = models.CharField(max_length=99, null=False)
    client_password = models.CharField(max_length=99, null=False)
    client_phone = models.CharField(max_length=11, null=False)
    client_photo = models.CharField(max_length=500, null=False)
    def __str__(self):
        return f'{self.client_surname} {self.client_name}'`

我得到了所有这些工厂的信息: 错误是factory.errors.FactoryError:无法生成抽象工厂RoleFactoryManager的实例;确保 RoleFactoryManager.Meta.model 已设置且 RoleFactoryManager.Meta.abstract 未设置或为 False。 如何修复它

我试图具体指出型号,更改导入等

python-3.x django django-models factory factory-boy
1个回答
0
投票

看起来您定义工厂的方式可能存在问题。错误消息表明工厂被视为抽象的,但您希望它们创建相应模型的实例。

这是您工厂的更新版本:

import factory
from factory.faker import faker
from .models import Role, Client

FAKE = faker.Faker(locale='ru_RU')

class RoleFactoryManager(factory.django.DjangoModelFactory):
    class Meta:
        model = Role
    role_name = 'manager'

class RoleFactoryAdmin(factory.django.DjangoModelFactory):
    class Meta:
        model = Role
    role_name = 'admin'

class RoleFactoryUser(factory.django.DjangoModelFactory):
    class Meta:
        model = Role
    role_name = 'user'

class ClientFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Client

    client_surname = factory.Faker('last_name')
    client_name = factory.Faker('first_name')
    client_date_of_registration = factory.Faker('date')
    client_email = factory.LazyAttribute(lambda a: '{}.{}{}@gmail.com'.format(a.client_surname, a.client_name, a.client_id).lower())
    client_password = factory.Faker('password')
    client_phone = factory.Faker('phone_number')
    client_photo = '/images/profile_photo.png'

所做的更改: 从 Meta 类中删除了 abstract = False,因为它对于具体工厂来说不是必需的。

为 faker 使用了正确的导入。

确保根据您的项目结构调整导入语句。如果问题仍然存在,请仔细检查角色和客户端模型以确保那里没有问题。

© www.soinside.com 2019 - 2024. All rights reserved.