Opened 2 years ago
Closed 2 years ago
#34897 closed Bug (invalid)
Django's admin UI - `ManyToManyField` with inheritance on the same class -> object shows itself inside the relation
| Reported by: | Leon Haffmans | Owned by: | nobody |
|---|---|---|---|
| Component: | contrib.admin | Version: | 4.2 |
| Severity: | Normal | Keywords: | inheritance, ManyToMany |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | yes |
Description
Consider a base class Followable which is an actual table in the database. Create a User model, which inherits from Followable but also contains a ManyToManyField relating to Followable called follows.
Now, when using Django's admin panel, a user will (wrongly) always show up in follows as reference to itself. This reference has nothing to do with the database, there is no entry in the relation table.
This should serve as a little reproducable example:
class Followable(models.Model):
# This is necessary to prevent doubled id name in `User`
followable_id = models.BigAutoField(primary_key=True)
class User(Followable):
alias = models.CharField(max_length=32)
follows = models.ManyToManyField(Followable, blank=True, related_name="followed_by")
User(alias="foo_user").save()
user = User.objects.get(alias="foo_user")
assert len(user.follows) == 0
If this is a known issue, I apologize. I wasn't able to find posts addressing this issue.
I'm sorry, I didn't understand the admin UI properly. You can just ignore this.