﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
23611	update_or_create doesn't retain related manager reference	Ryan Hiebert	André Ericson	"The update_or_create method on a related manager doesn't seem to retain the reference from the object that it came from, as I've come to expect from other methods (get, create, get_or_create). For example, the following models.py:

{{{
from django.db import models

class Spam(models.Model):
    pass

class Egg(models.Model):
    spam = models.ForeignKey(Spam, related_name='eggs')
}}}

And these tests:

{{{
from django.test import TestCase

from .models import Spam, Egg

class TestUpdateOrCreate(TestCase):
    def test_update_or_create_on_model_manager(self):
        spam = Spam.objects.create()
        Egg.objects.update_or_create(id=7, defaults={'spam': spam})

    def test_update_or_create_on_related_manager(self):
        spam = Spam.objects.create()
        spam.eggs.update_or_create(id=8)

    def test_create_on_related_manager(self):
        spam = Spam.objects.create()
        spam.eggs.create(id=9)

    def test_get_or_create_on_related_manager(self):
        spam = Spam.objects.create()
        spam.eggs.get_or_create(id=9)
}}}

All the tests but {{{test_update_or_create_on_related_manager}}} succeed. That one fails with an {{{IntegrityError}}}:

{{{
django.db.utils.IntegrityError: NOT NULL constraint failed: django_related_update_egg.spam_id
}}}

This is the case in the 1.7 release, the latest of the 1.7.x branch, and in the master branch."	Bug	closed	Database layer (models, ORM)	1.7	Normal	fixed		Loic Bistuer	Accepted	1	0	0	0	0	0
