此工厂:
`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。 如何修复它
我试图具体指出型号,更改导入等
看起来您定义工厂的方式可能存在问题。错误消息表明工厂被视为抽象的,但您希望它们创建相应模型的实例。
这是您工厂的更新版本:
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 使用了正确的导入。
确保根据您的项目结构调整导入语句。如果问题仍然存在,请仔细检查角色和客户端模型以确保那里没有问题。