使用工厂男孩时,Django 模型对象没有属性“_default_manager”
Django Model Object has no attribute '_default_manager' when using factory boy
我正在使用 Django Rest Framework 创建一些 api。我正在使用工厂男孩来创建测试实例。我有一个名为 base_model 的抽象模型,它被项目的所有其他模型继承。
created_at = models.DateTimeField(editable=False)
updated_at = models.DateTimeField(editable=False)
class Meta:
abstract = True
ordering = ['id']
def save(self, *args, **kwargs):
if not self.created_at:
self.created_at = timezone.now()
self.updated_at = timezone.now()
super(BaseModel, self).save(*args, **kwargs)
我的客户模型
from django.db import models
from mtl_manager.api.base_model import BaseModel
from mtl_manager.projects.enums import ProjectStatus
class Client(BaseModel):
client_name = models.CharField(max_length=250, blank=False)
phone_number = models.CharField(max_length=250, blank=False)
email = models.EmailField(blank=False, unique=True, null=False)
addressLane1 = models.TextField()
这个模型奏效了。我能够创建检索和列出客户端对象。现在我要对路由进行单元测试并开始使用 Factory boy
创建实例
class ClientFactory(DjangoModelFactory):
name = Faker("company")
gst = "323232";
phone_number = Faker("phone_number")
zipCode = "686542"
address_lane = Faker("street_address")
registration_number = "32313094839483"
state = "kerala"
country = Faker("country")
class Meta:
model = Client()
这会引发错误属性错误:'Client' 对象没有属性“_default_manager”。
但是我从我的控制台验证了客户端是否有默认管理器使用
In [11]: Client.objects
Out[11]: <django.db.models.manager.Manager at 0x7fe4fc6d7bb0>
需要传递对Client
class的引用,而不是构造Client
对象,[=16中的括号=]model = Client() 因此应该删除:
class ClientFactory(DjangoModelFactory):
# …
class Meta:
<b>model = Client</b>
我正在使用 Django Rest Framework 创建一些 api。我正在使用工厂男孩来创建测试实例。我有一个名为 base_model 的抽象模型,它被项目的所有其他模型继承。
created_at = models.DateTimeField(editable=False)
updated_at = models.DateTimeField(editable=False)
class Meta:
abstract = True
ordering = ['id']
def save(self, *args, **kwargs):
if not self.created_at:
self.created_at = timezone.now()
self.updated_at = timezone.now()
super(BaseModel, self).save(*args, **kwargs)
我的客户模型
from django.db import models
from mtl_manager.api.base_model import BaseModel
from mtl_manager.projects.enums import ProjectStatus
class Client(BaseModel):
client_name = models.CharField(max_length=250, blank=False)
phone_number = models.CharField(max_length=250, blank=False)
email = models.EmailField(blank=False, unique=True, null=False)
addressLane1 = models.TextField()
这个模型奏效了。我能够创建检索和列出客户端对象。现在我要对路由进行单元测试并开始使用 Factory boy
创建实例class ClientFactory(DjangoModelFactory):
name = Faker("company")
gst = "323232";
phone_number = Faker("phone_number")
zipCode = "686542"
address_lane = Faker("street_address")
registration_number = "32313094839483"
state = "kerala"
country = Faker("country")
class Meta:
model = Client()
这会引发错误属性错误:'Client' 对象没有属性“_default_manager”。
但是我从我的控制台验证了客户端是否有默认管理器使用
In [11]: Client.objects
Out[11]: <django.db.models.manager.Manager at 0x7fe4fc6d7bb0>
需要传递对Client
class的引用,而不是构造Client
对象,[=16中的括号=]model = Client() 因此应该删除:
class ClientFactory(DjangoModelFactory):
# …
class Meta:
<b>model = Client</b>