Как перезаписать список result_list в Django Admin?
Здесь новичок Django.Я работаю над проектом, в котором мне нужно сделать поиск в Django Admin Panel.
У меня есть модель
SearchModelи в ней есть столбцы"id", "word"и объектDesertи этот объект имеет '1' какidУ меня есть другая модель с именем
Result000('000' относится к первым трем буквам md5 слова "Desert"). Она имеет столбцы с именами"id", "word_id", "score", "title"и имеет объект с именем "Пустыня Сахара",word_idкоторого совпадает сidобъектаDesertв первой таблице.
Нет ForeignKey или любых других типов отношений между элементами этой таблицы
вот вопрос:
- Когда я ищу
Desertв поле поискаSearchModel. Я хочу перечислить все объекты в таблицеResult000, которые имеютword_idто же самое, чтоidобъектаDesertв SearchModel .
вот мой текущий код:
# root/admin.py
class BookAdmin(admin.ModelAdmin):
def __init__(self, model, admin_site):
self.list_display = [field.name for field in model._meta.fields]
self.search_fields = [field.name for field in model._meta.fields]
self.temp_model = "SearchModel"
self.temp_term = ""
self.word_id = None
self.search_term = self.temp_term
super().__init__(model, admin_site)
def get_search_results(self, request, queryset, search_term):
queryset, may_have_duplicate = super().get_search_results(
request, queryset, search_term
)
if len(search_term) > 0: self.search_term = search_term
else: self.search_term = self.temp_term
hashable, ret = self.md5_er(LowerTurkish(self.search_term).lower())
if hashable: table_name = f"Result{ret}"
else: table_name = request.path_info.split("/")[-2]
try:
# modelname = apps.get_model("root", table_name)
modelname = self.model_finder(table_name)
print("try içinde modelname: ", modelname)
messages.info(
request,
f"`{table_name}` modeli içindeki arama sonuçları")
word_id = self.model_finder(self.temp_model).objects.values_list("id")
std_content = modelname.objects.filter(word_id=word_id)
queryset = std_content
except:
std_content = self.model_finder(self.temp_model).objects.all()
# "nonetype not iterable" hatasının çözümü
return queryset, may_have_duplicate
def model_finder(self, table_name):
return apps.get_model("root", table_name)
def md5_er(self, data):
"""
:@params: data: md5 hashi alınacak olan veri, type: string
"""
hash_object = hashlib.md5(data.encode())
md5_hash = hash_object.hexdigest()
if md5_hash != "d41d8cd98f00b204e9800998ecf8427e":
"d41d8cd98f00b204e9800998ecf8427e refers md5 of empty string"
ret = md5_hash[:3]
return True, ret
else:
return False, False
Я могу получить то, что хочу, если SearchModel и таблица Desert имеют одинаковые имена столбцов, но это не работает, когда имена столбцов меняются. Я прочитал почти всю документацию Django, нашел примеры в интернете, просмотрел почти все записи на stackoverflow, но, как я уже сказал, я Django новичок 🥲. Заранее спасибо