﻿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
22296	m2m_changed pk_set value inconsistent between post_add and post_remove	Paul Garner	nobody	"the docs say:

""`pk_set`: For the pre_add, post_add, pre_remove and post_remove actions, this is a set of primary key values that have been added to or removed from the relation.""

What I found is that for `action=='post_add'`:
- first time `add(x)` -> `set([x])`
- next time (same `x`) `add(x)` -> `set([])`

but for `action=='post_remove'`:
- first time `remove(x)` -> `set([x])`
- next time (same `x`) `remove(x)` -> `set([x])`

I feel like they should be consistent. Either way is fine but the behaviour of `post_add` seems more useful to me (can avoid unnecessary action in your signal receiver)... but it should be documented that you get empty set if nothing needed adding.

I've only tried on 1.5 so far but looking at source I don't see any new code to change this behaviour https://github.com/django/django/blob/master/django/db/models/fields/related.py#L1032

Whereas it looks like the add method has code to deliberately exclude already added items https://github.com/django/django/blob/master/django/db/models/fields/related.py#L1008

I'm happy to make a patch if it's felt this is useful?"	Bug	closed	Database layer (models, ORM)	1.5	Normal	duplicate			Accepted	0	0	0	0	0	0
