#34651: 'list' object has no attribute '_committed'
-------------------------------------+-------------------------------------
Reporter: VinÃcius Febasse | Owner: nobody
Type: | Status: closed
Cleanup/optimization |
Component: Uncategorized | Version: 4.2
Severity: Normal | Resolution: invalid
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak):
* status: new => closed
* resolution: => invalid
Old description:
> I'm trying to work with multiple files without success. I'm working on
> the implementation in the admin, and then on to the form.
>
> For a single file it works fine
>
> from .models import ServiceOrder, MaintenanceService
> from django.contrib import admin
> from django.forms import Textarea
>
> # Register your models here.
> @admin.register(ServiceOrder)
> class OrderServiceAdmin(admin.ModelAdmin):
>
> list_display = ('id', 'requester', 'due_date', 'service_type',
> 'notes', 'status', 'registration_date')
> list_display_links = ('id', 'asker',)
> list_filter = ('requester', 'due_date', 'service_type', 'status',
> 'registration_date')
> search_fields = ('requester', 'due_date', 'service_type', 'status',
> 'registration_date')
> ordering = ('-id',)
> list_per_page = 25
> formfield_overrides = {
> OrderService.request: {'widget': Textarea(attrs={'class':
> 'custom-textarea'})},
> }
>
> @admin.register(MaintenanceService)
> class MaintenanceService(admin.ModelAdmin):
> list_display = ('id', 'description', 'value', 'type_service',
> 'is_minimum_tariff', 'minimum_tariff_value', 'registration_data')
> list_display_links = ('id', 'description', 'value')
> list_filter = ('description', 'value', 'type_service',
> 'is_minimum_tariff', 'minimum_tariff_value', 'registration_data')
> search_fields = ('description', 'value', 'type_service',
> 'is_minimum_tariff', 'minimum_tariff_value', 'registration_data')
> ordering = ('description', 'value', 'type_service',
> 'is_minimum_rate', 'minimum_rate_value', 'registration_date')
> list_per_page = 10
>
> But when I try to do it for multiples I get this error: 'list' object has
> no attribute '_committed'
>
> from .models import ServiceOrder, MaintenanceService
> from django.contrib import admin
> from django.forms import Textarea
> from django import forms
> from django.core.files import File
> from django.core.files import File as DjangoFile
>
> class MultipleFileInput(forms.ClearableFileInput):
> allow_multiple_selected = True
>
> class MultipleFileField(forms.FileField):
> def __init__(self, *args, **kwargs):
> kwargs.setdefault("widget", MultipleFileInput())
> super().__init__(*args, **kwargs)
>
> def clean(self, data, initial=None):
> single_file_clean = super().clean
> if isinstance(data, (list, tuple)):
> result = [single_file_clean(d, initial) for d in data]
> else:
> result = single_file_clean(data, initial)
> return result
>
> class OrderServiceAdminForm(forms.ModelForm):
> attachment = MultipleFileField(required=False)
>
> class Meta:
> model = ServiceOrder
> fields="__all__"
>
> # Register your models here.
> @admin.register(ServiceOrder)
> class OrderServiceAdmin(admin.ModelAdmin):
> form = OrderServiceAdminForm
>
> list_display = ('id', 'requester', 'due_date', 'service_type',
> 'notes', 'status', 'registration_date')
> list_display_links = ('id', 'asker',)
> list_filter = ('requester', 'due_date', 'service_type', 'status',
> 'registration_date')
> search_fields = ('requester', 'due_date', 'service_type', 'status',
> 'registration_date')
> ordering = ('-id',)
> list_per_page = 25
> formfield_overrides = {
> OrderService.request: {'widget': Textarea(attrs={'class':
> 'custom-textarea'})},
> }
>
> def save_model(self, request, obj, form, change):
> super().save_model(request, obj, form, change)
>
> if form.cleaned_data.get('attachment'):
> for file in form.cleaned_data['attached']:
> file_obj = DjangoFile(file, name=file.name)
> obj.attachment.create(file=file_obj)
>
> @admin.register(MaintenanceService)
> class MaintenanceService(admin.ModelAdmin):
> list_display = ('id', 'description', 'value', 'type_service',
> 'is_minimum_tariff', 'minimum_tariff_value', 'registration_data')
> list_display_links = ('id', 'description', 'value')
> list_filter = ('description', 'value', 'type_service',
> 'is_minimum_tariff', 'minimum_tariff_value', 'registration_data')
> search_fields = ('description', 'value', 'type_service',
> 'is_minimum_tariff', 'minimum_tariff_value', 'registration_data')
> ordering = ('description', 'value', 'type_service',
> 'is_minimum_rate', 'minimum_rate_value', 'registration_date')
> list_per_page = 10
New description:
I'm trying to work with multiple files without success. I'm working on the
implementation in the admin, and then on to the form.
For a single file it works fine
{{{
from .models import ServiceOrder, MaintenanceService
from django.contrib import admin
from django.forms import Textarea
# Register your models here.
@admin.register(ServiceOrder)
class OrderServiceAdmin(admin.ModelAdmin):
list_display = ('id', 'requester', 'due_date', 'service_type',
'notes', 'status', 'registration_date')
list_display_links = ('id', 'asker',)
list_filter = ('requester', 'due_date', 'service_type', 'status',
'registration_date')
search_fields = ('requester', 'due_date', 'service_type', 'status',
'registration_date')
ordering = ('-id',)
list_per_page = 25
formfield_overrides = {
OrderService.request: {'widget': Textarea(attrs={'class':
'custom-textarea'})},
}
@admin.register(MaintenanceService)
class MaintenanceService(admin.ModelAdmin):
list_display = ('id', 'description', 'value', 'type_service',
'is_minimum_tariff', 'minimum_tariff_value', 'registration_data')
list_display_links = ('id', 'description', 'value')
list_filter = ('description', 'value', 'type_service',
'is_minimum_tariff', 'minimum_tariff_value', 'registration_data')
search_fields = ('description', 'value', 'type_service',
'is_minimum_tariff', 'minimum_tariff_value', 'registration_data')
ordering = ('description', 'value', 'type_service',
'is_minimum_rate', 'minimum_rate_value', 'registration_date')
list_per_page = 10
}}}
But when I try to do it for multiples I get this error: 'list' object has
no attribute '_committed'
{{{
from .models import ServiceOrder, MaintenanceService
from django.contrib import admin
from django.forms import Textarea
from django import forms
from django.core.files import File
from django.core.files import File as DjangoFile
class MultipleFileInput(forms.ClearableFileInput):
allow_multiple_selected = True
class MultipleFileField(forms.FileField):
def __init__(self, *args, **kwargs):
kwargs.setdefault("widget", MultipleFileInput())
super().__init__(*args, **kwargs)
def clean(self, data, initial=None):
single_file_clean = super().clean
if isinstance(data, (list, tuple)):
result = [single_file_clean(d, initial) for d in data]
else:
result = single_file_clean(data, initial)
return result
class OrderServiceAdminForm(forms.ModelForm):
attachment = MultipleFileField(required=False)
class Meta:
model = ServiceOrder
fields="__all__"
# Register your models here.
@admin.register(ServiceOrder)
class OrderServiceAdmin(admin.ModelAdmin):
form = OrderServiceAdminForm
list_display = ('id', 'requester', 'due_date', 'service_type',
'notes', 'status', 'registration_date')
list_display_links = ('id', 'asker',)
list_filter = ('requester', 'due_date', 'service_type', 'status',
'registration_date')
search_fields = ('requester', 'due_date', 'service_type', 'status',
'registration_date')
ordering = ('-id',)
list_per_page = 25
formfield_overrides = {
OrderService.request: {'widget': Textarea(attrs={'class':
'custom-textarea'})},
}
def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
if form.cleaned_data.get('attachment'):
for file in form.cleaned_data['attached']:
file_obj = DjangoFile(file, name=file.name)
obj.attachment.create(file=file_obj)
@admin.register(MaintenanceService)
class MaintenanceService(admin.ModelAdmin):
list_display = ('id', 'description', 'value', 'type_service',
'is_minimum_tariff', 'minimum_tariff_value', 'registration_data')
list_display_links = ('id', 'description', 'value')
list_filter = ('description', 'value', 'type_service',
'is_minimum_tariff', 'minimum_tariff_value', 'registration_data')
search_fields = ('description', 'value', 'type_service',
'is_minimum_tariff', 'minimum_tariff_value', 'registration_data')
ordering = ('description', 'value', 'type_service',
'is_minimum_rate', 'minimum_rate_value', 'registration_date')
list_per_page = 10
}}}
--
Comment:
Please use one of
[https://code.djangoproject.com/wiki/TicketClosingReasons/UseSupportChannels
support channels]. Trac is not one of them.
--
Ticket URL: <https://code.djangoproject.com/ticket/34651#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/01070188b54dba27-3a9f9098-e4e4-4766-b97b-43d2c2de421e-000000%40eu-central-1.amazonses.com.