python - Django在尝试创建对象时抛出“'NoneType'对象不可调用”错误
问题描述
我一直在尝试使用 get_or_create 创建一个“标签”对象。但是,当我这样做时,Django 会抛出“NoneType”对象不可调用”错误。
以下是相关代码块:
def create_segments(self):
fi = self.fi
parser = self.parser
self._get_soup(fi)
paras = self.soup.find_all("w:p")
tags = list()
for para_num, para in enumerate(paras, start=1):
para_object = self._create_para_object(fi, para_num, para)
tags.append(self._create_tag_objects(para, para_object, fi)) <<<<<<<<<<<<<< THIS
sentences = self._get_string_with_tags(paras, tags)
self._create_segment_objects(sentences, parser, fi)
问题出在tags.append(self._create_tag_objects(para, para_object, fi))
.
para
是 BeautifulSoup 对象,para_object
是在问题行上方的一行中创建的 Django Paragraph 对象,并且fi
是另一个 Django 对象。
下面是_create_tag_object
。
def _create_tag_objects(self, para, para_object, fi):
tags = self._get_tag_xml(para)
in_file_id = Tag.objects.filter(paragraph__projectfile=fi).count() + 1
for tag in tags:
Tag.objects.get_or_create(
paragraph=para_object,
in_file_id=in_file_id + 1,
tag_wrapper=tag[0]
)
in_file_id += 1
return tags
下面是标签和段落的模型。
class Paragraph(models.Model):
projectfile = models.ForeignKey(ProjectFile, on_delete=models.CASCADE)
para_num = models.IntegerField()
default_wrapper = models.TextField()
class Tag(models.Model):
paragraph = models.ForeignKey(Paragraph, on_delete=models.CASCADE)
in_file_id = models.IntegerField()
tag_wrapper = models.TextField()
以下是完整的追溯。
Environment:
Request Method: POST
Request URL: http://localhost:8000/project/new
Django Version: 3.1.2
Python Version: 3.8.5
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users',
'translation',
'crispy_forms',
'storages',
'django_cleanup']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware']
Traceback (most recent call last):
File "/home/daniel/VSCode/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/home/daniel/VSCode/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/daniel/VSCode/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/home/daniel/VSCode/venv/lib/python3.8/site-packages/django/contrib/auth/mixins.py", line 52, in dispatch
return super().dispatch(request, *args, **kwargs)
File "/home/daniel/VSCode/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 98, in dispatch
return handler(request, *args, **kwargs)
File "/home/daniel/VSCode/master_trans/translation/views.py", line 209, in post
create_file_and_segments(parser, fi_list, project)
File "/home/daniel/VSCode/master_trans/translation/seg_creators.py", line 24, in create_file_and_segments
CreateSegment(fi, parser)
File "/home/daniel/VSCode/master_trans/translation/seg_creators.py", line 35, in __init__
creator.create_segments()
File "/home/daniel/VSCode/master_trans/translation/seg_creators.py", line 174, in create_segments
tags.append(self._create_tag_objects(para, para_object, fi))
File "/home/daniel/VSCode/master_trans/translation/seg_creators.py", line 116, in _create_tag_objects
Tag.objects.get_or_create(
File "/home/daniel/VSCode/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/daniel/VSCode/venv/lib/python3.8/site-packages/django/db/models/query.py", line 573, in get_or_create
return self.get(**kwargs), False
File "/home/daniel/VSCode/venv/lib/python3.8/site-packages/django/db/models/query.py", line 418, in get
clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs)
File "/home/daniel/VSCode/venv/lib/python3.8/site-packages/django/db/models/query.py", line 942, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "/home/daniel/VSCode/venv/lib/python3.8/site-packages/django/db/models/query.py", line 962, in _filter_or_exclude
clone._filter_or_exclude_inplace(negate, *args, **kwargs)
File "/home/daniel/VSCode/venv/lib/python3.8/site-packages/django/db/models/query.py", line 969, in _filter_or_exclude_inplace
self._query.add_q(Q(*args, **kwargs))
File "/home/daniel/VSCode/venv/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1358, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
File "/home/daniel/VSCode/venv/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1377, in _add_q
child_clause, needed_inner = self.build_filter(
File "/home/daniel/VSCode/venv/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1267, in build_filter
value = self.resolve_lookup_value(value, can_reuse, allow_joins)
File "/home/daniel/VSCode/venv/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1063, in resolve_lookup_value
value = value.resolve_expression(
Exception Type: TypeError at /project/new
Exception Value: 'NoneType' object is not callable
如果有的话,我可以提供更多相关的代码,但我认为上面列出的内容是可以的。预先感谢您提供有用的见解。
解决方案
推荐阅读
- python - 在 Python 版本 2.7.5 中未指定长度的文件记录末尾附加空格
- php - 如何在 PHP 中创建除数数组?
- php - 将字符串数据写入数组
- c# - DOTNET Core 迁移问题
- python - 来自文件路径和标签的 csv 的 Pytorch 数据加载器
- java - 为 NON PLAY STORE APP 创建 CHECK_FOR_UPDATE 机制的最佳方法是什么
- python - 如何在 Pandas DataFrame 中取值两侧的平均值?
- php - 本地主机抛出 403 禁止错误 Apache Laravel
- python - 如何管理 python/selenium 中的错误?我接下来要继续学习的步骤是什么?
- python - 即使安装在 python/site-packages 文件夹中,也找不到 folium --version