Привет, Хабр! Меня зовут Павел Цвилюк, начинающий Python Developer. В ходе работы над одним из проектов я столкнулся с проблемой подключения поискового поля и выгрузки отчётов в exel в административной панели. Их необходимо было регистрировать вместе с моим классом User:
Так выглядел мой код, когда я попытался изначально зарегистрировать их:
Запустив вышеописанный код я получил следующее:
Свою строку admin.site.register(User, UsersAdmin, UsersAdmin) я заменил на следующую:
И вуаля, всё заработало! Для меня это было маленькой, но очень приятной победой. Надеюсь, что моя статья поможет тем, кто столкнётся с такой же проблемой. Спасибо, что дочитали!
models.py
class User(models.Model):
name=models.CharField(max_length=200)
surname=models.CharField(max_length=200)
email=models.EmailField()
password=models.CharField(max_length=200)
telephone=models.PositiveIntegerField(max_length=12,blank=True,null=True)
Так выглядел мой код, когда я попытался изначально зарегистрировать их:
admin.py
from django.contrib import admin
from .models import User
from import_export import resources
from import_export.admin import ImportExportModelAdmin
class UsersAdmin(admin.ModelAdmin):
search_fields = ('name', 'email', 'telephone')
class UsersResource(resources.ModelResource):
class Meta:
model = User
skip_unchanged = True
fields = ('id', 'name', 'email', 'telephone')
class UserAdmin(ImportExportModelAdmin):
resource_class = UsersResource
admin.site.register(User, UsersAdmin, UsersAdmin)
Запустив вышеописанный код я получил следующее:
admin.site.register(User, UsersAdmin, UserAdmin)Я передаю 3 possitional arguments, но я не учёл, что «self» being passed implicitly. По-отдельности они работали без каких-либо проблем, так что надо было просто правильно укомплектовать это всё для передачи. Я выяснил, что ImportExportModelAdmin есть в родителях admin.ModelAdmin, как и UsersAdmin. Использование декоратора было лучшим решением для выхода из этой ситуации.
TypeError: register() takes from 2 to 3 positional arguments but 4 were given
Свою строку admin.site.register(User, UsersAdmin, UsersAdmin) я заменил на следующую:
@admin.register(User)
class UserAdmin(ImportExportModelAdmin):
search_fields = ('name', 'email', 'telephone')
И вуаля, всё заработало! Для меня это было маленькой, но очень приятной победой. Надеюсь, что моя статья поможет тем, кто столкнётся с такой же проблемой. Спасибо, что дочитали!