﻿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	nobody	"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 17.x branch, and in the master branch."	Bug	new	Database layer (models, ORM)	1.7	Normal				Unreviewed	0	0	0	0	0	0
