Django - Переопределение get_form для настройки администраторских форм на основе запроса

Попробуйте использовать следующий синтаксис (удалите Text из расширенных свойств, поскольку он используется для импорта файлов CSV):

using (OleDbConnection connection = new 
OleDbConnection(String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"HDR={1};IMEX=1;Readonly=1;Extended Properties=Excel 8.0;\"",pathOnly ,header )))
{
    using (OleDbCommand command = new OleDbCommand(sql, connection))
    {
        using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
        {
            dataTable = new DataTable();
            adapter.Fill(dataTable);
        }
    }
}

Если у вас установлен поставщик Office 2007 или более поздней версии, попробуйте использовать поставщика Microsoft.ACE.OLEDB.12.0. так как он также поддерживает чтение старых форматов Excel.

Если вы пытаетесь импортировать текстовые файлы (csv), то лучше использовать библиотеки анализа текста, такие как:

12
задан Andy Baker 26 March 2009 в 22:38
поделиться

3 ответа

Я понятия не имею, почему печать свойства не дает Вам, хотят Вас просто присвоенный (я предполагаю, может быть, это зависит от того, где Вы печатаете, точно), но попытайтесь переопределить get_fieldsets вместо этого. Базовое внедрение похоже на это:

def get_fieldsets(self, request, obj=None):
    if self.declared_fieldsets:
        return self.declared_fieldsets
    form = self.get_formset(request).form
    return [(None, {'fields': form.base_fields.keys()})]

Т.е. необходимо смочь просто возвратить кортежи.

РЕДАКТИРОВАНИЕ andybak. 4 года на и я нашел свой собственный вопрос снова при попытке сделать что-то подобное на другом проекте. На этот раз я пошел с этим подходом, хотя изменено немного, чтобы избежать необходимости повторять fieldsets определение:

def get_fieldsets(self, request, obj=None):
    # Add 'item_type' on add forms and remove it on changeforms.
    fieldsets = super(ItemAdmin, self).get_fieldsets(request, obj)
    if not obj: # this is an add form
        if 'item_type' not in fieldsets[0][1]['fields']:
            fieldsets[0][1]['fields'] += ('item_type',)
    else: # this is a change form
        fieldsets[0][1]['fields'] = tuple(x for x in fieldsets[0][1]['fields'] if x!='item_type')
    return fieldsets
10
ответ дан 2 December 2019 в 03:12
поделиться

У меня есть некоторый пример кода из недавнего моего проекта, которому я верю, может помочь Вам. В этом примере суперпользователи могут отредактировать каждое поле, в то время как всем остальным исключили поле "описания".

Обратите внимание, что я думаю, что ожидается, что Вы возвращаете a Form класс от get_form, который мог быть, почему Ваш не работал совершенно верно.

Вот пример:

class EventForm(forms.ModelForm):
    class Meta:
        model = models.Event
        exclude = ['description',]

class EventAdminForm(forms.ModelForm):
    class Meta:
        model = models.Event

class EventAdmin(admin.ModelAdmin):

    def get_form(self, request, obj=None, **kwargs):
        if request.user.is_superuser:
            return EventAdminForm
        else:
            return EventForm 

admin.site.register(models.Event, EventAdmin)
22
ответ дан 2 December 2019 в 03:12
поделиться

Это мое решение:

class MyModelAdmin(admin.ModelAdmin):  

    def get_form(self, request, obj=None, **kwargs):
        if request.user.is_superuser:
            self.exclude = ()
        else:
            self.exclude = ('field_to_exclude',) 
        return super(MyModelAdmin, self).get_form(request, obj=None, **kwargs) 

Надежда может помочь

6
ответ дан 2 December 2019 в 03:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: