mirror of https://github.com/django/django.git
[1.8.x] Fixed #24325 -- Documented change in ModelForm.save() foreign key access.
Backport of 0af3822dc3
from master
This commit is contained in:
parent
2e6d8e51db
commit
8657e7caaa
|
@ -710,6 +710,28 @@ Now, an error will be raised to prevent data loss::
|
|||
...
|
||||
ValueError: Cannot assign "<Author: John>": "Author" instance isn't saved in the database.
|
||||
|
||||
Accessing foreign keys in ``ModelForm.save()``
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In older versions, you could access unsaved foreign key objects in
|
||||
``ModelForm.save()`` when adding new objects. For example, given ``Book`` with
|
||||
a ``ForeignKey`` to ``Author``::
|
||||
|
||||
class BookForm(forms.ModelForm):
|
||||
def save(self, *args, **kwargs):
|
||||
book = super(BookForm, self).save(*args, **kwargs)
|
||||
book.title = "%s by %s" % (book.title, book.author.name)
|
||||
return book
|
||||
|
||||
Now if the related instance hasn't been saved (for example, when adding an
|
||||
author and some inlined books in the admin), accessing the foreign key
|
||||
``book.author`` in the example) will raise ``RelatedObjectDoesNotExist``. This
|
||||
change was necessary to avoid assigning unsaved objects to relations (as
|
||||
described in the previous section).
|
||||
|
||||
To adapt the example above, you could replace ``book.author.name`` with
|
||||
``self.cleaned_data['author'].name``.
|
||||
|
||||
Management commands that only accept positional arguments
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
|
|
@ -295,6 +295,7 @@ ing
|
|||
ini
|
||||
init
|
||||
inline
|
||||
inlined
|
||||
inlines
|
||||
inspectdb
|
||||
Instagram
|
||||
|
|
Loading…
Reference in New Issue