Python 3.x 名称错误:名称';接触值';未在serializers.py中定义
我学习了关于Django REST框架的教程,现在我正在尝试将所学知识应用到我的数据库中。stacktrace的最后一部分是:Python 3.x 名称错误:名称';接触值';未在serializers.py中定义,python-3.x,django,Python 3.x,Django,我学习了关于Django REST框架的教程,现在我正在尝试将所学知识应用到我的数据库中。stacktrace的最后一部分是: ... File "C:\Python\Python39\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen
...
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
出现错误的字段contact_value位于列表的第一位。Mymodels.py定义了接触值:
#
# 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列表返回:
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
因此,很难从中理解为什么没有定义接触值。我缺少什么?字段是按名称指定的,因此是字符串,而不是标识符,因为这些标识符确实不在范围内:
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'
)
类ContactMethodSerializer(serializers.ModelSerializer):
类元:
#序列化程序的模型
模型=接触法
#用于序列化的字段名
字段=(
#&downarrow;&downarrow;字符串文字
“接触值”,
“有效期自”,
“有效期至”,
“分机号”,
“注意事项”,
“id”,
“联系人\方法\类型\ id”,
“创建于”,
“创建人”,
“更新地址”,
“更新人”
)
谢谢!碰巧我通过使用“all”
解决了这个问题,但仍然没有与字符串的需要联系起来——Python新手。
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'
)