【问题标题】:Using Django Q objects in *__lte keywords在 *__lte 关键字中使用 Django Q 对象
【发布时间】:2014-07-30 15:14:38
【问题描述】:

我正在尝试在 Django 中执行此操作:

ThatModel.objects.filter(desired_moisture__lte=Q(
    F("sensor__moisture") + F("sensor__calibrate_low"))
    / F("sensor__calibrate_high") + F("upper_deviation"))

这是一种代码,所以这是我试图以一种不那么冗长的方式做的事情:

a <= (b + c) / d + e

但是,这会导致:

[2014-06-10 00:17:22,724: ERROR/MainProcess] Task pidrator.hardware_controller.CheckIrrigators[67c82981-780e-4c39-b88c-08a728773dd1] raised unexpected: IntegrityError("Failed processing format-parameters; Python 'q' cannot be converted to a MySQL type",)
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 240, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/usr/lib/python3.4/site-packages/celery/app/trace.py", line 437, in __protected_call__
    return self.run(*args, **kwargs)
  File "/home/max/programming/pidrator/pidrator/hardware_controller.py", line 93, in CheckIrrigators
    **filter_args):
  File "/usr/lib/python3.4/site-packages/django/db/models/query.py", line 96, in __iter__
    self._fetch_all()
  File "/usr/lib/python3.4/site-packages/django/db/models/query.py", line 857, in _fetch_all
    self._result_cache = list(self.iterator())
  File "/usr/lib/python3.4/site-packages/django/db/models/query.py", line 220, in iterator
    for row in compiler.results_iter():
  File "/usr/lib/python3.4/site-packages/django/db/models/sql/compiler.py", line 713, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/usr/lib/python3.4/site-packages/django/db/models/sql/compiler.py", line 786, in execute_sql
    cursor.execute(sql, params)
  File "/usr/lib/python3.4/site-packages/django/db/backends/util.py", line 53, in execute
    return self.cursor.execute(sql, params)
  File "/usr/lib/python3.4/site-packages/mysql/connector/django/base.py", line 117, in execute
    return self._execute_wrapper(self.cursor.execute, query, args)
  File "/usr/lib/python3.4/site-packages/mysql/connector/django/base.py", line 103, in _execute_wrapper
    utils.IntegrityError(err.msg), sys.exc_info()[2])
  File "/usr/lib/python3.4/site-packages/django/utils/six.py", line 549, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib/python3.4/site-packages/mysql/connector/django/base.py", line 99, in _execute_wrapper
    return method(query, args)
  File "/usr/lib/python3.4/site-packages/mysql/connector/cursor.py", line 502, in execute
    psub = _ParamSubstitutor(self._process_params(params))
  File "/usr/lib/python3.4/site-packages/mysql/connector/cursor.py", line 378, in _process_params
    "Failed processing format-parameters; %s" % err)
django.db.utils.IntegrityError: Failed processing format-parameters; Python 'q' cannot be converted to a MySQL type

desired_moisture__lte 似乎无法处理我传递给它的 Q 对象。我该如何完成这项工作?

【问题讨论】:

    标签: django django-models django-q


    【解决方案1】:

    摆脱包装Q(),你应该有一个工作结果。有关示例,请参阅https://docs.djangoproject.com/en/dev/topics/db/queries/#using-f-expressions-in-filters

    ThatModel.objects.filter(desired_moisture__lte=(F("sensor__moisture") + F("sensor__calibrate_low")) / F("sensor__calibrate_high") + F("upper_deviation"))
    

    【讨论】:

    • 工作就像一个魅力!谢谢!
    猜你喜欢
    • 2013-05-30
    • 1970-01-01
    • 2017-11-13
    • 2011-12-29
    • 2015-04-13
    • 2020-09-21
    • 2021-09-15
    • 2013-02-27
    • 2018-12-25
    相关资源
    最近更新 更多