У меня есть 5 полей, но мне нужно искать по "имени пользователя" в "поле поиска". как мы можем сделать это в приложении DJango
В моем приложении есть такие поля как телефон, имя пользователя, адрес, id. но мне нужна только информация о поле "имя пользователя", когда я ищу его в строке поиска. как мы можем это сделать. может ли кто-нибудь помочь мне с кодом DJango
Вы выполняете поиск по системе? Если да, то используйте get_queryset(self). Это вернет имя пользователя, которое вы ищете. И get_context_data()
def get_queryset(self):
return User.objects.filter(username__icontains=self.request.GET.get("q"))
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context["q"] = f'q={self.request.GET.get("q")}&'
return context
Запишите это в ваше представление, где находится ваше приложение поиска. в шаблоне форма поиска должна иметь name='q'
Предположим, у вас есть модель с именем class Department(models.Model)
с 2 полями (название, описание) в models.py
вот так:
from django.db import models
class Department(models.Model):
DEPT_NAME = (
('Staff', 'Staff'),
('Manager', 'Manager'),
)
name = models.CharField(max_length=15, choices=DEPT_NAME)
description = models.CharField(max_length=100, null=True, blank=True)
def __str__(self):
return self.name
На странице администратора Django вам нужен результат поиска только по полю name
.
В вашем admin.py
используйте search_fields атрибут ModelAdmin
:
from django.contrib import admin
from .models import *
@admin.register(Department)
class DepartmentAdmin(admin.ModelAdmin):
DEPT_NAME = (
('Staff', 'Staff'),
('Manager', 'Manager'),
)
name = models.CharField(max_length=15, choices=DEPT_NAME)
description = models.CharField(max_length=100, null=True, blank=True)
search_fields = ('id', 'name',) # <-- Choose any field you want Django search