django расширяет наборы полей ModelAdmin и сохраняет значения по умолчанию - PullRequest
6 голосов
/ 21 августа 2010

есть хороший способ добавить пользовательских элементов в подклассный набор полей ModelAdmin, то есть сохранить все значения по умолчанию и некоторые дополнительные функции.

(я знаю, что могу добавить всеобратно по умолчанию сам, но надеялся на более хороший путь)

Ответы [ 3 ]

10 голосов
/ 18 сентября 2011

Вы можете переопределить get_fieldsets метод ModelAdmin.

Реализация по умолчанию выглядит следующим образом:

def get_fieldsets(self, request, obj=None):
    "Hook for specifying fieldsets for the add form."
    if self.declared_fieldsets:
        return self.declared_fieldsets
    form = self.get_form(request, obj)
    fields = form.base_fields.keys() + list(self.get_readonly_fields(request, obj))
    return [(None, {'fields': fields})]

Таким образом, вы можете переопределить его, например, так:

class MyCustomAdmin(ModelAdmin):
    def get_fieldsets(self, request, obj=None):
        fs = super(MyCustomAdmin, self).get_fieldsets(request, obj)
        # fs now contains [(None, {'fields': fields})], do with it whatever you want
        all_fields = fs[0][1]['fields']
        return fs
1 голос
/ 21 августа 2010

Не проверено, но может работать:

class MyAdmin(BaseAdmin):
    fieldsets = BaseAdmin.fieldsets + (...)

Это (если это работает) добавит другие наборы полей после унаследованных.

0 голосов
/ 29 мая 2014

Вот пример расширения пользовательского класса ModelAdmin и добавления дополнительного набора полей.

Обратите внимание, что в первый раз, когда я попробовал это сделать, я пропустил проверку "если нет ...".Каждый раз, когда я обновлял страницу, на странице повторялись дополнительные разделы.

class GISDataFileAdmin(admin.ModelAdmin):
    # abbreviated version of detailed fieldsets (one fieldset named 'Datafile Info')
    fieldsets = [('DataFile Info', {\
              'fields': ('datafile_id', 'datafile_label', 'datafile_version')\
               }),]

class ShapefileSetAdmin(GISDataFileAdmin):    

    # extend fieldsets in GISDataFileAdmin
    def get_fieldsets(self, request, obj=None):

        # get fieldset(s) from GISDataFileAdmin
        #
        fs = super(ShapefileSetAdmin, self).get_fieldsets(request, obj)  

        # pull out the fieldset name(s) e.g. [ 'DataFile Info']
        #
        section_names = [ x[0] for x in fs if x is not None and len(x) > 0 and not x[0] == '']   

        # check if new fieldset info has been added
        # if not, add the new fieldset
        #
        if not 'Shapefile Info' in sections_names:   
            # Add new info as the top fieldset
            fs = [ ('Shapefile Info', {
               'fields': ('name', ('zipfile_checked',  'has_shapefile'))
                    })] + fs
        return fs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...