Here is a test that show the problem:
{{{
def test_error_on_refresh_from_db(self):
def add_one(id):
task_model = FakeTask.objects.get(id=id)
task_model.task_group.finished_tasks_number =
F('finished_tasks_number') + 1
task_model.task_group.save()
task_model.task_group.refresh_from_db()
task_model.save()
self.assertEqual(task_model.task_group.finished_tasks_number, 1)
task_group_model = FakeTaskGroup.objects.create()
task_model = FakeTask.objects.create(task_group=task_group_model)
add_one(task_model.id)
task_model.refresh_from_db()
self.assertEqual(task_model.task_group.finished_tasks_number, 1)
}}}
Here you can find the definition (light version) of the this models:
{{{
class FakeTaskGroup(models.Model):
finished_tasks_number = models.PositiveIntegerField(default=0)
class FakeTask(models.Model):
task_group = models.ForeignKey(FakeTaskGroup,
on_delete=models.CASCADE)
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/30281>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* status: new => closed
* resolution: => wontfix
Comment:
Django 2.0 is end-of-life April 2019 and only receives security and data
loss fixes until then (but most likely there won't be another release).
--
Ticket URL: <https://code.djangoproject.com/ticket/30281#comment:1>