#python #django
#python #django
Вопрос:
Мне нужно создать «встроенный поиск» на моей странице администратора, и я не знаю, с чего начать.
Идея состоит в том, чтобы заменить это «—-» для строки поиска или просто ввести строку «User: «, это не имеет значения. Если возможно, я хотел бы сделать то же самое в строке «Учетная запись: «.
Примечание: при нажатии на панель открывается столбец с данными и т. Д. Нажмите здесь, чтобы увидеть экран печати, пожалуйста.
# admin.py
class UserCreateForm(UserCreationForm):
class Meta:
model = User
fields = ('username', 'first_name' , 'last_name', 'email', 'is_staff', 'is_superuser' )
class UserAdmin(UserAdmin):
add_form = UserCreateForm
prepopulated_fields = {'username': ('first_name' , 'last_name')}
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('first_name', 'last_name', 'username', 'email', 'password1', 'password2', 'is_staff', 'is_superuser' ),
}),
)
class AccountAdmin(admin.ModelAdmin):
search_fields = ['name', 'email', 'phone', 'id', 'document', 'subscriber_code']
list_filter = ['status']
class UserAccountAdmin(admin.ModelAdmin):
search_fields = ['account__id', 'account__name', 'user__first_name', 'account__subscriber_code']
list_filter = ['is_superuser']
# userAccount.py
from django.db import models
from django_mysql.models import JSONField, Model
from django.utils import timezone
from django.contrib.auth.models import User
from .account import Account
from .resource import Resource
class UserAccount(models.Model):
id = models.AutoField(
db_column='uacId',
primary_key=True
)
user = models.ForeignKey(
User,
db_column='uacUseId',
on_delete=models.CASCADE,
null=True
)
account = models.ForeignKey(
Account,
db_column='aucAccId',
on_delete=models.CASCADE,
null=True
)
created_at = models.DateTimeField(
db_column='uacCreatedAt',
default=timezone.now
)
is_superuser = models.BooleanField(
db_column='uacIsSuperuser',
default=False
)
disabled_resources = models.ManyToManyField(
Resource,
blank=True,
db_table="UserAccountDisabledResources"
)
status = models.CharField(
db_column='uacStatus',
max_length=30,
choices = [(x,x) for x in ['ACTIVE', 'DISABLE']],
default='ACTIVE'
)
def __str__(self):
return '%s - %s' % (self.account.name, self.user.email)
class Meta:
managed = True
db_table = 'UserAccount'
Комментарии:
1. Добавление a
search_fields
в UserAdmin не решит эту проблему?2. Чтобы уточнить: вы хотите иметь эту возможность поиска на странице администратора, на которой перечислены все объекты, или на странице администратора для одного объекта? (Я думаю, что предложение AzyCrw4282 работает для страницы списка, но не для страницы с одним объектом.)
3. да, идея заключается в том, чтобы построить его встроенным для конкретного отдельного объекта (например, пользователя)
Ответ №1:
Ну, я обнаружил, что в django есть встроенная функция для того, что я планировал сделать. Это ‘autocomplete_fields’. https://docs.djangoproject.com/en/3.1/ref/contrib/admin /
Спасибо всем, кто пытался помочь 🙂