Opened 10 years ago
Closed 10 years ago
#25587 closed Bug (duplicate)
Django fails, when trying to save object "as new" with inlines objects and form validation errors.
| Reported by: | user0007 | Owned by: | nobody |
|---|---|---|---|
| Component: | contrib.admin | Version: | 1.8 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Let's assume that I have one existing object in Django Admin with some related objects (inlines). When I try to create a clone (by clicking on "Save as new"), but there are some validation errors, Django will fail, after clicking "Save and continue editing".
Everything works without inlines objects.
Error:
django.db.models.fields in get_prep_value ValueError: invalid literal for int() with base 10: ''
Stacktrace (most recent call last):
File "django/core/handlers/base.py", line 113, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "django/contrib/admin/options.py", line 406, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
File "django/utils/decorators.py", line 91, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "django/views/decorators/cache.py", line 89, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "django/contrib/admin/sites.py", line 202, in inner
return view(request, *args, **kwargs)
File "django/utils/decorators.py", line 25, in _wrapper
return bound_func(*args, **kwargs)
File "django/utils/decorators.py", line 91, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "django/utils/decorators.py", line 21, in bound_func
return func(self, *args2, **kwargs2)
File "django/db/transaction.py", line 223, in inner
return func(*args, **kwargs)
File "django/contrib/admin/options.py", line 1038, in add_view
prefix=prefix, queryset=inline.queryset(request))
File "www/forms.py", line 566, in __init__
super(UczestnikAdminInlineFormset, self).__init__(*args, **kwargs)
File "django/forms/models.py", line 720, in __init__
queryset=qs, **kwargs)
File "django/forms/models.py", line 441, in __init__
super(BaseModelFormSet, self).__init__(**defaults)
File "django/forms/formsets.py", line 56, in __init__
self._construct_forms()
File "django/forms/formsets.py", line 124, in _construct_forms
self.forms.append(self._construct_form(i))
File "django/forms/models.py", line 729, in _construct_form
form = super(BaseInlineFormSet, self)._construct_form(i, **kwargs)
File "django/forms/models.py", line 463, in _construct_form
connection=connections[self.get_queryset().db])
File "django/db/models/fields/__init__.py", line 340, in get_db_prep_lookup
value = self.get_prep_lookup(lookup_type, value)
File "django/db/models/fields/__init__.py", line 322, in get_prep_lookup
return self.get_prep_value(value)
File "django/db/models/fields/__init__.py", line 555, in get_prep_value
return int(value)
Change History (6)
comment:1 by , 10 years ago
| Version: | 1.7 → 1.8 |
|---|
follow-up: 3 comment:2 by , 10 years ago
comment:3 by , 10 years ago
follow-up: 5 comment:4 by , 10 years ago
Could you please provide a sample project or a minimal set of models to reproduce the issue?
comment:5 by , 10 years ago
Replying to timgraham:
Could you please provide a sample project or a minimal set of models to reproduce the issue?
Sure.
models.py:
class User(models.Model):
first_name = models.CharField(max_length=255)
class Project(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=255)
class Collaborator(models.Model):
email = models.Email()
user = models.ForeignKey(User)
project = models.ForeignKey(Project)
admin.py:
class CollaboratorAdmin(admin.TabularInline):
model = Collaborator
extra = 1
raw_id_fields = ('user',)
class ProjectAdmin(admin.ModelAdmin):
inlines = [CollaboratorAdmin]
raw_id_fields = ('user',)
save_as = True
admin.site.register(Project, ProjectAdmin)
admin.site.register(User)
Follow those steps:
- Add Project object with 2 inlines objects.
- Go to edit form.
- Clear project's "name" input and click "Save as new" button.
- Click "Save and continue editing".
- Booom :-)
Tested on Django 1.6, 1.7, 1.8
comment:6 by , 10 years ago
| Resolution: | → duplicate |
|---|---|
| Status: | new → closed |
Duplicate of #23387, fixed in Django 1.9.
Do you happen to have any file or image fields? This looks similar to #14760.