﻿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
37309	`Model.__eq__` treats distinct unsaved composite-PK instances as equal	Denny Biasiolli		"`Model.__eq__` still uses `pk is None` to decide whether an instance is unsaved. That is wrong for composite primary keys (`pk` is a tuple) and for `db_default` PKs (`DatabaseDefault` is not `None`).

```
>>> User() == User()
True
>>> User(tenant_id=1) == User(tenant_id=1)
True
```

Documented contract (and simple-PK behavior since #18864 / #18250) is that unsaved instances are equal only to themselves. `__hash__` already uses `_is_pk_set()` and raises for an unset PK.

The XML serializer has the same leftover (`if obj.pk is not None`) and emits `pk='[""None"", ""None""]'` for an unsaved composite instance instead of omitting the attribute.

Proposed fix: use `_is_pk_set()` in both places, matching `__hash__` and the rest of the #373 conversion.

Related: #18864, #18250, #373."	Bug	new	Database layer (models, ORM)	5.2	Normal		compositeprimarykey _is_pk_set		Unreviewed	1	0	0	0	1	0
