Code

Opened 8 months ago

Closed 8 months ago

#21401 closed Bug (duplicate)

Bug when saving an object pointed by another

Reported by: msbrogli@… Owned by: nobody
Component: Database layer (models, ORM) Version: 1.5
Severity: Normal Keywords:
Cc: msbrogli@… Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

My models are:

class A(models.Model):
    b = models.ForeignKey('B', null=True)
    name = models.CharField(max_length=255)

class B(models.Model):
    name = models.CharField(max_length=255)

The following code reproduces the problem:

a = A(name="Test A")
a.b = B(name="Test B")

a.b.save()
a.save()

a = A.objects.get(id=a.id)
assert a.b is not None

The assert fails! As I look inside the code, the field b_id is set only when a.b is being set. So, the workaround is:

a = A(name="Test A")
a.b = B(name="Test B")

a.b.save()
a.b = a.b  # workaround
a.save()

a = A.objects.get(id=a.id)
assert a.b is not None

Now it works as expected.

Is it a bug or a feature? I can't find anything in the docs.

If it is a bug, I guess the object should have a list of which objects are pointing to it. So, when it is added, it should updated everyone id field.

Attachments (0)

Change History (2)

comment:1 Changed 8 months ago by msbrogli@…

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Summary changed from But when saving an object pointed by another to Bug when saving an object pointed by another

comment:2 Changed 8 months ago by timo

  • Resolution set to duplicate
  • Status changed from new to closed

Duplicate of #10811

Add Comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
as The resolution will be set. Next status will be 'closed'
The resolution will be deleted. Next status will be 'new'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.