python-3.x - NameError:名称“contact_value”未在 serializers.py 中定义
问题描述
我遵循了关于 Django REST 框架的教程,现在我正在尝试将我学到的知识应用到我的数据库中。堆栈跟踪的最后一部分是:
...
File "C:\Python\Python39\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 790, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "C:\Users\jmr\projects\python\django-ref-impl\django_ref_impl\parties\urls.py", line 30, in <module>
from . import views
File "C:\Users\jmr\projects\python\django-ref-impl\django_ref_impl\parties\views.py", line 49, in <module>
from .serializers import (
File "C:\Users\jmr\projects\python\django-ref-impl\django_ref_impl\parties\serializers.py", line 52, in <module>
class ContactMethodSerializer(serializers.ModelSerializer):
File "C:\Users\jmr\projects\python\django-ref-impl\django_ref_impl\parties\serializers.py", line 54, in ContactMethodSerializer
class Meta:
File "C:\Users\jmr\projects\python\django-ref-impl\django_ref_impl\parties\serializers.py", line 59, in Meta
contact_value,
NameError: name 'contact_value' is not defined
我的serializer.py的开头是:
from rest_framework import serializers
from .models import (
ContactMethod,
ContactMethodType,
CountryType,
GenderType,
Organisation,
OrganisationType,
Party,
PartyContact,
PartyContactType,
PartyIdentifierType,
PartyRelationship,
PartyType,
Person,
RoleType,
RoleTypeRelationship,
)
#
# TABLE: CONTACT_METHOD (COME)
#
class ContactMethodSerializer(serializers.ModelSerializer):
class Meta:
# the model for Serializer
model = ContactMethod
# field names for serialization
fields = (
contact_value,
effective_period_from,
effective_period_to,
extension_number,
notes,
id,
contact_method_type_id,
created_at,
created_by,
updated_at,
updated_by,
)
...
错误字段contact_value是列表中的第一个。我的models.py定义了contact_value:
#
# TABLE: CONTACT_METHOD (COME)
#
class ContactMethod(models.Model):
# attributes:
contact_value = models.CharField(db_column = 'CONTACT_VALUE', max_length = 255, null=True, blank=True, verbose_name = 'Contact Value')
effective_period_from = models.DateTimeField(db_column = 'EFFECTIVE_PERIOD_FROM', null=True, blank=True, verbose_name = 'Effective Period From')
effective_period_to = models.DateTimeField(db_column = 'EFFECTIVE_PERIOD_TO', null=True, blank=True, verbose_name = 'Effective Period To')
extension_number = models.CharField(db_column = 'EXTENSION_NUMBER', max_length = 255, null=True, blank=True, verbose_name = 'Extension Number')
notes = models.TextField(db_column = 'NOTES', max_length = 1000, null=True, blank=True, verbose_name = 'Notes')
created_at = models.DateTimeField(db_column = 'CREATED_AT', verbose_name = 'Created At', editable = False, auto_now_add=True)
created_by = models.CharField(db_column = 'CREATED_BY', max_length = 255, verbose_name = 'Created By', editable = False)
updated_at = models.DateTimeField(db_column = 'UPDATED_AT', verbose_name = 'Updated At', editable = False, auto_now=True)
updated_by = models.CharField(db_column = 'UPDATED_BY', max_length = 255, verbose_name = 'Updated By', editable = False)
# primary & foreign keys:
id = models.BigAutoField(db_column = 'ID', primary_key = True)
# COME_REF_CMTY_FK: ref CONTACT_METHOD_TYPE
contact_method_type_id = models.ForeignKey(ContactMethodTypeLv, on_delete = models.DO_NOTHING, db_column = 'CONTACT_METHOD_TYPE_ID', verbose_name = 'Contact Method Type')
def __str__(self):
return f'contact_value={self.contact_value} | effective_period_from={self.effective_period_from} | effective_period_to={self.effective_period_to} | extension_number={self.extension_number} | notes={self.notes} | id={self.id} | contact_method_type_id={self.contact_method_type_id} | created_at={self.created_at} | created_by={self.created_by} | updated_at={self.updated_at} | updated_by={self.updated_by}'
class Meta:
#abstract = True
managed = False
db_table = 'CONTACT_METHOD'
verbose_name = 'Contact Method'
verbose_name_plural = 'Contact Methods'
ordering = (
'id',
)
$ pip list 返回:
Package Version
------------------- -------
asgiref 3.3.1
cx-Oracle 8.1.0
Django 3.1.4
django-appconf 1.0.4
djangorestframework 3.12.2
Pillow 8.1.0
pip 20.3.3
pytz 2020.5
setuptools 49.2.1
six 1.15.0
sqlparse 0.4.1
因此,很难从中理解为什么没有定义contact_value 。我错过了什么?
解决方案
这些字段是按名称指定的,因此是字符串,而不是标识符,因为这些标识符确实不在范围内:
class ContactMethodSerializer(serializers.ModelSerializer):
class Meta:
# the model for Serializer
model = ContactMethod
# field names for serialization
fields = (
# ↓ ↓ string literal
'contact_value',
'effective_period_from',
'effective_period_to',
'extension_number',
'notes',
'id',
'contact_method_type_id',
'created_at',
'created_by',
'updated_at',
'updated_by'
)
推荐阅读
- unit-testing - 如何使用sqlmock mock db,函数内获取的db连接
- python - 在枚举中定义一个列表以将枚举标识为子组的一部分
- json - 使用 json 文件中的动态字符串进行颤振国际化
- nginx - nginx正则表达式位置
- angular - 多次发出 RxJS http 请求
- apache-kafka - Kafka主题名称可以参数化吗?
- c++ - c ++简单删除向量重复导致分段错误
- authentication - 创建并激活没有权限的目录帐户
- android - Firebase 测试实验室 Android Emulator 或物理设备更新 WebView 版本
- docker - 解析 docker 容器内的站点主机名