python - AttributeError:混合器(dashboard.ContactQueue):类型对象“JSONField”没有属性“_meta”
问题描述
我正在使用mixer
模块来创建测试对象。下面是模型类。
class ContactQueue(models.Model):
arn = models.CharField(max_length=255)
queue_id = models.CharField(max_length=50)
queue_type = models.CharField(max_length=25)
name = models.CharField(max_length=25, null=True)
description = models.TextField(null=True)
outbound_caller_config = models.JSONField()
hours_of_operation_id = models.CharField(max_length=50)
status = models.CharField(
max_length=10,
choices=(
('ENABLED', 'ENABLED'),
('DISABLED', 'DISABLED'),
)
)
这是我写的测试用例。
class TestContactQueue:
def test_model(self):
obj = mixer.blend("dashboard.ContactQueue")
assert obj.pk == 1, "Should create a ContactQueue instance"
在运行测试时,我得到了这个错误。
__________________________________________________________________ TestContactQueue.test_model ___________________________________________________________________
self = <dashboard.tests.test_models.TestContactQueue object at 0x000002329C1C8548>
def test_model(self):
> obj = mixer.blend("dashboard.ContactQueue")
dashboard\tests\test_models.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
..\venv\lib\site-packages\mixer\main.py:568: in blend
return type_mixer.blend(**values)
..\venv\lib\site-packages\mixer\main.py:116: in blend
for name, value in defaults.items()
..\venv\lib\site-packages\mixer\main.py:113: in <genexpr>
value.gen_value(self, name, value)
..\venv\lib\site-packages\mixer\mix_types.py:229: in gen_value
return type_mixer.gen_field(field)
..\venv\lib\site-packages\mixer\backend\django.py:273: in gen_field
return super(TypeMixer, self).gen_field(field)
..\venv\lib\site-packages\mixer\main.py:193: in gen_field
return self.gen_value(field.name, field, unique=unique)
..\venv\lib\site-packages\mixer\main.py:238: in gen_value
fab = self.get_fabric(field, field_name, fake=fake)
..\venv\lib\site-packages\mixer\main.py:282: in get_fabric
self.__fabrics[key] = self.make_fabric(field.scheme, field_name, fake)
..\venv\lib\site-packages\mixer\backend\django.py:330: in make_fabric
fcls, field_name=fname, fake=fake, kwargs=kwargs)
..\venv\lib\site-packages\mixer\main.py:301: in make_fabric
factory=self.__factory).blend, **kwargs)
..\venv\lib\site-packages\mixer\main.py:55: in __call__
cls_type, mixer=mixer, factory=factory, fake=fake)
..\venv\lib\site-packages\mixer\main.py:88: in __init__
self.__fields = _.OrderedDict(self.__load_fields())
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <TypeMixer <class 'django.db.models.fields.json.JSONField'>>
def __load_fields(self):
> private_fields = getattr(self.__scheme._meta, 'private_fields', [])
E AttributeError: Mixer (dashboard.ContactQueue): type object 'JSONField' has no attribute '_meta'
..\venv\lib\site-packages\mixer\backend\django.py:389: AttributeError
----------------------------------------------------------------------- Captured log call ------------------------------------------------------------------------
ERROR mixer:main.py:574 Traceback (most recent call last):
File "c:\users\aman\desktop\my_project\venv\lib\site-packages\mixer\main.py", line 568, in blend
return type_mixer.blend(**values)
File "c:\users\aman\desktop\my_project\venv\lib\site-packages\mixer\main.py", line 116, in blend
for name, value in defaults.items()
File "c:\users\aman\desktop\my_project\venv\lib\site-packages\mixer\main.py", line 113, in <genexpr>
value.gen_value(self, name, value)
File "c:\users\aman\desktop\my_project\venv\lib\site-packages\mixer\mix_types.py", line 229, in gen_value
return type_mixer.gen_field(field)
File "c:\users\aman\desktop\my_project\venv\lib\site-packages\mixer\backend\django.py", line 273, in gen_field
return super(TypeMixer, self).gen_field(field)
File "c:\users\aman\desktop\my_project\venv\lib\site-packages\mixer\main.py", line 193, in gen_field
return self.gen_value(field.name, field, unique=unique)
File "c:\users\aman\desktop\my_project\venv\lib\site-packages\mixer\main.py", line 238, in gen_value
fab = self.get_fabric(field, field_name, fake=fake)
File "c:\users\aman\desktop\my_project\venv\lib\site-packages\mixer\main.py", line 282, in get_fabric
self.__fabrics[key] = self.make_fabric(field.scheme, field_name, fake)
File "c:\users\aman\desktop\my_project\venv\lib\site-packages\mixer\backend\django.py", line 330, in make_fabric
fcls, field_name=fname, fake=fake, kwargs=kwargs)
File "c:\users\aman\desktop\my_project\venv\lib\site-packages\mixer\main.py", line 301, in make_fabric
factory=self.__factory).blend, **kwargs)
File "c:\users\aman\desktop\my_project\venv\lib\site-packages\mixer\main.py", line 55, in __call__
cls_type, mixer=mixer, factory=factory, fake=fake)
File "c:\users\aman\desktop\my_project\venv\lib\site-packages\mixer\main.py", line 88, in __init__
self.__fields = _.OrderedDict(self.__load_fields())
File "c:\users\aman\desktop\my_project\venv\lib\site-packages\mixer\backend\django.py", line 389, in __load_fields
private_fields = getattr(self.__scheme._meta, 'private_fields', [])
AttributeError: Mixer (dashboard.ContactQueue): type object 'JSONField' has no attribute '_meta'
解决方案
您必须明确设置模型中的所有 JSON 字段,如果您不这样做,混合将对其进行迭代并检查它们的 _meta 属性
推荐阅读
- python - 使用python在CIDR中的IP地址和掩码
- python - 使用open-cv python检测图像中的线条后获取矩形坐标
- java - 为什么 AudioManager 不适用于我的 Android 应用程序?
- sql - 使用管道分隔和空值复制到阶段
- mysql - SQL - 选择具有共同项目名称和不同价格的行,并显示最低折扣且不重复
- r - 使用 ggplot 创建带有误差线的散点图
- node.js - 我有一个带有时间戳和时区列的 postgres 数据库表。我如何正确查询和获取值
- python - 如何查找大小从 1 到列表长度的列表的所有组合(没有 Itertools)
- dynamics-crm - 使用作为 API 查找属性的备用键查找 Dynamics 365 实体
- logging - 使用 stdout 或 stderr 作为 fluentd 源?