2015-08-17 2 views
3

Есть ли способ использовать несколько расширений Django в admin.site.register() внутри admin.py? Я использую расширения «simple-history» и «import-export», но у меня может быть только один из них в admin.site.register().Несколько аргументов администратора Django с расширениями

Пример: У меня есть модель под названием «Автомобили», которая использует расширение «простая история», поэтому мне нужно admin.site.register(Cars, SimpleHistoryAdmin), так как их документация говорит об этом. Я хочу использовать расширение для импорта и экспорта, а также для той же модели «Автомобили», но admin.site.register() не принимает несколько аргументов, чтобы добавить его.

models.py

class Cars(models.Model): 
    Year = models.CharField(max_length=30) 
    Make = models.CharField(max_length=30) 
    Model = models.CharField(max_length=30) 
    history = HistoricalRecords() 

    class Meta: 
     verbose_name_plural = "Car Table" 

    def __str__(self): 
     return self.Make 

admin.py

class CarResource(resources.ModelResource): 
    class Meta: 
     model = Cars 
     fields = ('id','Year', 'Make', 'Model',) 

class CarAdmin(ImportExportModelAdmin): 
    resource_class = CarResource 
    pass 

#I want to use the import/export extension (code above), along with simple-history 
admin.site.register(Cars, CarAdmin) 
admin.site.register(Cars, SimpleHistoryAdmin) 

Я попытался с помощью прокси-сервера и Внутристрочные, но прокси-сервер делает новую модель, которую я не хочу, и когда я использую встроенные строки, я получаю сообщение о том, что для него требуется внешний ключ, но я не пытаюсь получить объекты модели из другой модели. Именование их одной и той же модели не работает, потому что модель уже зарегистрирована. Любая помощь высоко ценится!

ответ

1

В python класс может иметь более одного родителя. Просто наследуйте от двух родителей сразу. Но и ImportExportModelAdmin, и SimpleHistoryAdmin наследуются от ModelAdmin, это не хорошо. Существует также ImportExportMixin, мы можем использовать его вместо ImportExportModelAdmin, так что будет только одна ссылка на ModelAdmin.

class CarResource(resources.ModelResource): 
    class Meta: 
     model = Cars 
     fields = ('id','Year', 'Make', 'Model',) 

class CarAdmin(ImportExportMixin, SimpleHistoryAdmin): 
    resource_class = CarResource 
    pass 

#I want to use the import/export extension (code above), along with simple-history 
admin.site.register(Cars, CarAdmin) 
+0

Ничего себе! Большое спасибо за этот ответ. Я должен был прочитать больше о документации по импорту-экспорту. Я не ожидал такого простого ответа от этого, и я очень благодарен. – Bark