﻿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
36235	RelatedManager.all().get_or_create() does not work	Nick Pope	Johanan Oppong Amoateng	"When accessing the queryset for a related manager, `.get_or_create()` and `.update_or_create()` lose context of the related instance.

Calling on the related manager works as expected:

{{{#!python
publisher.books.get_or_create(name=""The Very Hungry Caterpillar"")
}}}

This is the case that was fixed by #3121 and #23611.

But calling on the queryset causes an `IntegrityError` to be raised:

{{{#!python
publisher.books.all().get_or_create(name=""The Very Hungry Caterpillar"")
}}}

This can be a subtle failure that is hard to understand, especially if `publisher.books.all()` is assigned to a variable earlier.

The challenge here is that the overridden methods on the manager set `kwargs[self.field.name] = self.instance`.

We'd need to be able to pass this information down to the queryset. It looks like this might already be available in `_known_related_objects` which is set by `RelatedManager._apply_rel_filters()`, so that would be a good starting point for investigation.

We would also need to check whether something needs to be done to select the correct database as `RelatedManager.get_or_create()` has handling for this:

{{{#!python
            db = router.db_for_write(self.model, instance=self.instance)
}}}

If this is something we can't fix reliably, then we should update the admonition under [https://docs.djangoproject.com/en/stable/ref/models/querysets/#get-or-create .get_or_create()] in the docs and probably update [https://docs.djangoproject.com/en/stable/ref/models/querysets/#update-or-create .update_or_create()] to make this and other issues related to use through `RelatedManager` more clear."	Bug	assigned	Database layer (models, ORM)	dev	Normal		get_or_create, related, manager	Johanan Oppong Amoateng	Accepted	1	0	0	1	0	0
