#17253 closed New feature (wontfix)
Add foreign object in memory without saving to database — at Version 1
Reported by: | Owned by: | nobody | |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.3 |
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 (last modified by )
Similar to the following post
http://stackoverflow.com/questions/7908349/django-making-relationships-in-memory-without-saving-to-db?answertab=active#tab-top
class Group: name = models.Chars() def save(): super(self, Group).save() # access foreign objects members = self.groupmember_set.all() class GroupMember: group = models.ForeignKey(Group) member = models.ForeignKey(User)
I have a page to allow people to create Group , and invited existing user to become member.
When form is submitted, Group data and GroupMember data is submitted together.
I would like to override the Group's save function() , and in the save function(), I need to access the GroupMember data.
Example code
g = Group(name='abc') gm1 = GroupMember(member=user1, group=g) gm2 = GroupMember(member=user2, group=g) g.groupmember_set.add(gm1) # Add to memory , I do not want to save to db immediately g.groupmember_set.add(gm2) # Add to memory , I do not want to save to db immediately g.save() gm1.save() gm2.save()
Since the .add() function save the related object to db immediately , causing error.
I do not want to save the Group object first , because it will trigger 2 times save()
Change History (1)
comment:1 by , 13 years ago
Description: | modified (diff) |
---|---|
Resolution: | → wontfix |
Status: | new → closed |
Formatting fixed, please use 'Preview' to check formatting, thanks.
If we don't save M2M objects to the DB immediately when running
add()
, when do we save them?save()
doesn't do that, we would need a 'flush-everything-to-the-database' call, which we don't have. Adding one would require a fundamental change to the way that the ORM works - essentially something like the unit-of-work pattern in SQLAlchemy.I'm therefore closing WONTFIX.
Note that saving the Group object first doesn't necessarily mean you need to call
save()
twice - theadd()
calls do not need to be followed bysave()
. (I'm guessing you may have reasons why it is this way in your case, but I don't think the situation is forced on you by Django).