姜戈错误,"The QuerySet value for an exact lookup must be limited to one result using slicing"



我有一个错误,当我创建一个对象与数据从csv文件,错误是:

"精确查找的QuerySet值必须限制为使用切片的一个结果。">

似乎来自get_or_create行。我试图切片所有的查询集的功能,但这并没有解决问题。我已经知道所有的模型字段的存在和正确与我的模型。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对象。您可以使用.get(…)[Django-doc]或使用.first()[Django-doc]来获取一个对象(这两者并不完全等同,更多信息,请访问文档)。

因此,您应该传递一个base_user对象,例如:
draughtsman = base_user.objects.get(first_name__icontains=issuer_str[0:4]),

相关内容

最新更新