https://www.softel.co.jp/blogs/tech/archives/1877 Für die Abfrage habe ich hier verwiesen.
Verwenden Sie "extra", da spezielle Abfragen nicht mit "filter" durchgeführt werden können
def get_ambiguous_queryset(self, queryset, value, columns):
"""
:param queryset:
:param value:
:param columns:
:return:
"""
query_text = ''
count = 0
for column in columns:
if query_text != '':
query_text += ' OR '
temp_value = value
if isinstance(value, list):
if len(value) > count:
temp_value = value[count]
else:
temp_value = value[0]
query_text += f"CONVERT({column} USING utf8) COLLATE utf8_unicode_ci LIKE %s"
temp_value = temp_value.replace('%', r'\%%').replace('_', r'\_')
params.append(f'%{temp_value}%')
count += 1
if query_add:
query_text += query_add
return queryset.extra(where=[query_text], params=params)
#
self.get_ambiguous_queryset(queryset, value, ['name', 'code', 'description'])
#()
self.get_ambiguous_queryset(queryset, [value, self.convert_tel(value)], ['name', 'tel'])
#Verwendung des Abfragesatzes, des zu durchsuchenden Werts, Übergabe der zu durchsuchenden Spalte Sie können auch den zu durchsuchenden Wert in einem Array übergeben. Er ist mit der zu durchsuchenden Spalte verknüpft. Seien Sie vorsichtig, wenn ein Join erforderlich ist. Masu)
self.get_ambiguous_queryset(queryset, value, ['shop.name', 'shop.code'])
#OK-Muster (verbunden, wenn der Shop im Filter geschrieben ist)
self.get_ambiguous_queryset(queryset, value, ['shop.name', 'shop.code']).filter(shop__name__isnull=False)
Selbst wenn ich weiß, wie man es in eine Abfrage schreibt, frage ich mich immer, wie man es in Django schreibt
Recommended Posts