【发布时间】:2021-02-23 11:21:50
【问题描述】:
当我使用 csv 文件中的数据创建对象时出现错误,错误是:
“精确查找的 QuerySet 值必须使用切片限制为一个结果。”
它似乎来自 get_or_create 行。我试图对函数中的所有查询集进行切片,但这并没有解决问题。而且我已经知道所有模型字段都存在并且我的models.py是正确的
contracts = Contract.objects.filter(contract_id=row[2])
if not contracts:
continue
new_contract = contracts.first()
logger.info(new_contract.contract_id)
_, created = Job.objects.get_or_create(contract=new_contract,
order_type = str(row[3])[:0],
description_of_works = str(row[4]),
added_on = date_time_obj,
date_raised = date_time_obj,
draughtsman = base_user.objects.filter(first_name__icontains=issuer_str[0:4]),
status = job_status, #IDFK
comment = str(row[8]),
design_required = design_req,
designer = str(row[10])).first()
我检查了同一主题的其他问题,但他们没有任何解决方案。 任何帮助表示赞赏。
编辑: 这是容器的回溯
web_1 | Traceback (most recent call last):
web_1 | File "/usr/local/lib/python3.9/site-packages/asgiref/sync.py", line 339, in thread_handler
web_1 | raise exc_info[1]
web_1 | File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 38, in inner
web_1 | response = await get_response(request)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py", line 233, in _get_response_async
web_1 | response = await wrapped_callback(request, *callback_args, **callback_kwargs)
web_1 | File "/usr/local/lib/python3.9/site-packages/asgiref/sync.py", line 304, in __call__
web_1 | ret = await asyncio.wait_for(future, timeout=None)
web_1 | File "/usr/local/lib/python3.9/asyncio/tasks.py", line 442, in wait_for
web_1 | return await fut
web_1 | File "/usr/local/lib/python3.9/site-packages/asgiref/current_thread_executor.py", line 23, in run
web_1 | result = self.fn(*self.args, **self.kwargs)
web_1 | File "/usr/local/lib/python3.9/site-packages/asgiref/sync.py", line 343, in thread_handler
web_1 | return func(*args, **kwargs)
web_1 | File "./Trackers_App/views.py", line 224, in test_zone
web_1 | import_csv()
web_1 | File "./Trackers_App/views.py", line 1747, in import_csv
web_1 | _, created = Job.objects.get_or_create(contract=new_contract,
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
web_1 | return getattr(self.get_queryset(), name)(*args, **kwargs)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 573, in get_or_create
web_1 | return self.get(**kwargs), False
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 425, in get
web_1 | num = len(clone)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 269, in __len__
web_1 | self._fetch_all()
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 1308, in _fetch_all
web_1 | self._result_cache = list(self._iterable_class(self))
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 53, in __iter__
web_1 | results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
web_1 | File "/usr/local/lib/python3.9/site-packages/cachalot/monkey_patch.py", line 29, in inner
web_1 | return original(compiler, *args, **kwargs)
web_1 | File "/usr/local/lib/python3.9/site-packages/cachalot/monkey_patch.py", line 79, in inner
web_1 | cache_key = cachalot_settings.CACHALOT_QUERY_KEYGEN(compiler)
web_1 | File "/usr/local/lib/python3.9/site-packages/cachalot/utils.py", line 76, in get_query_cache_key
web_1 | sql, params = compiler.as_sql()
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 513, in as_sql
web_1 | where, w_params = self.compile(self.where) if self.where is not None else ("", [])
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 430, in compile
web_1 | sql, params = node.as_sql(self, self.connection)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/sql/where.py", line 81, in as_sql
web_1 | sql, params = compiler.compile(child)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 430, in compile
web_1 | sql, params = node.as_sql(self, self.connection)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/fields/related_lookups.py", line 132, in as_sql
web_1 | return super().as_sql(compiler, connection)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/lookups.py", line 302, in as_sql
web_1 | return super().as_sql(compiler, connection)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/lookups.py", line 181, in as_sql
web_1 | rhs_sql, rhs_params = self.process_rhs(compiler, connection)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/lookups.py", line 284, in process_rhs
web_1 | raise ValueError(
web_1 | ValueError: The QuerySet value for an exact lookup must be limited to one result using slicing.
web_1 | 2021-02-23 11:15:29,536 ERROR Internal Server Error: /trackers/test_zone/
web_1 | Traceback (most recent call last):
web_1 | File "/usr/local/lib/python3.9/site-packages/asgiref/sync.py", line 339, in thread_handler
web_1 | raise exc_info[1]
web_1 | File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 38, in inner
web_1 | response = await get_response(request)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py", line 233, in _get_response_async
web_1 | response = await wrapped_callback(request, *callback_args, **callback_kwargs)
web_1 | File "/usr/local/lib/python3.9/site-packages/asgiref/sync.py", line 304, in __call__
web_1 | ret = await asyncio.wait_for(future, timeout=None)
web_1 | File "/usr/local/lib/python3.9/asyncio/tasks.py", line 442, in wait_for
web_1 | return await fut
web_1 | File "/usr/local/lib/python3.9/site-packages/asgiref/current_thread_executor.py", line 23, in run
web_1 | result = self.fn(*self.args, **self.kwargs)
web_1 | File "/usr/local/lib/python3.9/site-packages/asgiref/sync.py", line 343, in thread_handler
web_1 | return func(*args, **kwargs)
web_1 | File "./Trackers_App/views.py", line 224, in test_zone
web_1 | import_csv()
web_1 | File "./Trackers_App/views.py", line 1747, in import_csv
web_1 | _, created = Job.objects.get_or_create(contract=new_contract,
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
web_1 | return getattr(self.get_queryset(), name)(*args, **kwargs)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 573, in get_or_create
web_1 | return self.get(**kwargs), False
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 425, in get
web_1 | num = len(clone)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 269, in __len__
web_1 | self._fetch_all()
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 1308, in _fetch_all
web_1 | self._result_cache = list(self._iterable_class(self))
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/query.py", line 53, in __iter__
web_1 | results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
web_1 | File "/usr/local/lib/python3.9/site-packages/cachalot/monkey_patch.py", line 29, in inner
web_1 | return original(compiler, *args, **kwargs)
web_1 | File "/usr/local/lib/python3.9/site-packages/cachalot/monkey_patch.py", line 79, in inner
web_1 | cache_key = cachalot_settings.CACHALOT_QUERY_KEYGEN(compiler)
web_1 | File "/usr/local/lib/python3.9/site-packages/cachalot/utils.py", line 76, in get_query_cache_key
web_1 | sql, params = compiler.as_sql()
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 513, in as_sql
web_1 | where, w_params = self.compile(self.where) if self.where is not None else ("", [])
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 430, in compile
web_1 | sql, params = node.as_sql(self, self.connection)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/sql/where.py", line 81, in as_sql
web_1 | sql, params = compiler.compile(child)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 430, in compile
web_1 | sql, params = node.as_sql(self, self.connection)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/fields/related_lookups.py", line 132, in as_sql
web_1 | return super().as_sql(compiler, connection)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/lookups.py", line 302, in as_sql
web_1 | return super().as_sql(compiler, connection)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/lookups.py", line 181, in as_sql
web_1 | rhs_sql, rhs_params = self.process_rhs(compiler, connection)
web_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/lookups.py", line 284, in process_rhs
web_1 | raise ValueError(
web_1 | ValueError: The QuerySet value for an exact lookup must be limited to one result using slicing.
【问题讨论】:
-
draughtsman = base_user.objects.filter(first_name__icontains=issuer_str[0:4])是罪魁祸首,因为那是一个QuerySet,所以是一个集合,而不是一个单个base_user对象。 -
解决了,您能否将此评论作为答案,以便我可以将其标记为已解决,谢谢
标签: django django-models