0

I'm trying to add data to a model class from the django admin panel. After clicking the "Save" button, I get this error:

AttributeError at /admin/filmapp/movies/add/
'ImageField' object has no attribute '_committed'

I tried this solution, but unfortunately it doesn't work for me: override save method - 'ImageFile' object has no attribute '_committed'

This is my code: admin.py

from django.contrib import admin

from .models import Movies
admin.site.register(Movies)

models.py

class Movies(models.Model):
    title = models.CharField(max_length=50, null=True, blank=False)
    year = models.PositiveIntegerField(null=True, blank=False)
    description = models.TextField(null=True, blank=False)
    rating = models.FloatField(null=True, blank=True)
    img = models.ImageField(upload_to='static/img')
    url = models.CharField(max_length=1000, null=True, blank=False)
    img_video = models.ImageField(upload_to='static/img/imgvideo', default=img)

This is full Traceback:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/admin/filmapp/movies/add/

Django Version: 3.1.7
Python Version: 3.8.5
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'filmapp.apps.FilmappConfig']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/contrib/admin/options.py", line 614, in wrapper
    return self.admin_site.admin_view(view)(*args, **kwargs)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/utils/decorators.py", line 130, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/contrib/admin/sites.py", line 233, in inner
    return view(request, *args, **kwargs)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/contrib/admin/options.py", line 1653, in add_view
    return self.changeform_view(request, None, form_url, extra_context)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/utils/decorators.py", line 43, in _wrapper
    return bound_method(*args, **kwargs)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/utils/decorators.py", line 130, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/contrib/admin/options.py", line 1534, in changeform_view
    return self._changeform_view(request, object_id, form_url, extra_context)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/contrib/admin/options.py", line 1580, in _changeform_view
    self.save_model(request, new_object, form, not add)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/contrib/admin/options.py", line 1093, in save_model
    obj.save()
  File "/home/cristian/PycharmProjects/filmorix/filmproject/filmapp/models.py", line 18, in save
    super(Movies, self).save(*args, **kwargs)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/db/models/base.py", line 753, in save
    self.save_base(using=using, force_insert=force_insert,
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/db/models/base.py", line 790, in save_base
    updated = self._save_table(
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/db/models/base.py", line 895, in _save_table
    results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/db/models/base.py", line 933, in _do_insert
    return manager._insert(
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/db/models/query.py", line 1254, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1396, in execute_sql
    for sql, params in self.as_sql():
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1339, in as_sql
    value_rows = [
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1340, in <listcomp>
    [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1340, in <listcomp>
    [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1291, in pre_save_val
    return field.pre_save(obj, add=True)
  File "/home/cristian/Anaconda3/lib/python3.8/site-packages/django/db/models/fields/files.py", line 305, in pre_save
    if file and not file._committed:

Exception Type: AttributeError at /admin/filmapp/movies/add/
Exception Value: 'ImageField' object has no attribute '_committed'
finch11111
  • 11
  • 3
  • You can not set `default=img`. I would advice making the field `null=True`, and add a property that returns the `img` in case `img_video` is `None`. – Willem Van Onsem Mar 21 '21 at 20:12
  • please post the code (full traceback) in this post. It will be indexed by search engine and may help others who have same problem and find this question from searching his/her traceback. – Kristian Mar 22 '21 at 06:59

1 Answers1

0

As correctly said in comments default=img is outright wrong, django models can't work like that. Either do what comment author suggested, or set image field value if none in save()

Also your upload_to suggests you don't understand difference between static and media - if file is uploaded to site, it's not static, and it shouldn't be in STATIC, and all uploads are relative to MEDIA_ROOT instead.

Gin Fuyou
  • 226
  • 1
  • 5