#django #date #between
#django #Дата #между
Вопрос:
Я всегда получаю эту ошибку TypeError: not all arguments converted during string formatting
Вот мой запрос
State.objects.raw('...review_create_date between %s and %s group by error_type',[fromdate,todate])
Здесь fromdate=2011-05-21
и todate='2011-05-27'
Приведенный выше запрос выполняется в командной строке mysql, но не может быть выполнен в оболочке python
Пожалуйста, кто-нибудь мне поможет
Вот обратная трассировка
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 1412, in __iter__
query = iter(self.query)
File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 73, in __iter__
self._execute_query()
File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py", line 87, in _execute_query
self.cursor.execute(self.sql, self.params)
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/util.py", line 18, in execute
sql = self.db.ops.last_executed_query(self.cursor, sql, params)
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/__init__.py", line 216, in last_executed_query
return smart_unicode(sql) % u_params
TypeError: not all arguments converted during string formatting
Комментарии:
1. Может ли кто-нибудь помочь в этом? я пытался использовать %% s и %%s%%, но получаю ту же ошибку
2. попробуйте ‘…%s и %s сгруппировать по error_type’ % (fromdate,todate))
3. @JamesO: ах, нет, определенно нет.
4. @Vikram: нам нужно увидеть больше деталей. Фактический код плюс фактическая обратная трассировка.
5. Вы пробовали форматировать строку как …objects.raw(‘your string’% (fromdate, todate)) на случай, если есть внутренняя проблема с django? Не могли бы вы также опубликовать полный запрос?
Ответ №1:
запрос django raw sql в представлении
Я также столкнулся с этой проблемой, поэтому я изменил старое форматирование на новое, используя format, и у меня это сработало.
models.py
class VehicleDamage(models.Model):
requestdate = models.DateTimeField("requestdate")
vendor_name = models.CharField("vendor_name", max_length=50)
class Meta:
managed=False
views.py
def location_damageReports(request):
#static date for testing
date_from = '2019-11-01'
date_to = '2019-21-01'
vehicle_damage_reports = VehicleDamage.objects.raw("SELECT * FROM VendorReport_vehicledamage WHERE requestdate BETWEEN '{0}' AND '{1}'".format(date_from, date_to))
damage_report = DashboardDamageReportSerializer(vehicle_damage_reports, many=True)
data={"data": damage_report.data}
return HttpResponse(json.dumps(data), content_type="application/json")
Ответ №2:
Попробуйте использовать ?
вместо %s
.
Комментарии:
1. Я полагаю,
?
используется для генерации случайных результатов