Opened 12 months ago
Closed 12 months ago
#35928 closed Bug (duplicate)
[contenttypes] GenericRelation uses wrong primary key type if set to models.UUIDField
| Reported by: | Jon Eyolfson | Owned by: | |
|---|---|---|---|
| Component: | contrib.contenttypes | Version: | 5.1 |
| Severity: | Normal | Keywords: | GenericRelation, UUIDField |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
For a minimal example, if I have the following:
class Delivery(models.Model):
id = models.UUIDField(primary_key=True, editable=False)
content_type = models.ForeignKey(
ContentType,
on_delete=models.CASCADE,
null=True,
blank=True,
editable=False,
)
object_id = models.PositiveBigIntegerField(
blank=True,
null=True,
editable=False,
)
content_object = GenericForeignKey("content_type", "object_id")
class Other(models.Model):
delivery = GenericRelation(Delivery, related_query_name="other")
If I use delivery.other.all().query I see the wrong primary key:
SELECT /* SNIP */ WHERE "delivery"."id" = 269290806699601176541887178676879701060
If I look at a normal query with the primary key on Delivery, like Delivery.objects.filter(pk=delivery_pk).query, I see:
SELECT /* SNIP */ WHERE "delivery"."id" = ca9785d8a6e311ef874b0ad61d0b3444
This causes SQLite to show the following error:
OverflowError: Python int too large to convert to SQLite INTEGER
I assume because GenericRelation is converting the UUID to an integer, which would cause the lookup to fail anyways.
Change History (2)
comment:1 by , 12 months ago
| Description: | modified (diff) |
|---|
comment:2 by , 12 months ago
| Resolution: | → duplicate |
|---|---|
| Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
Duplicate of #33450 Integer primary key is wrongly casted to UUID when filtering GenericRelation on model with UUID primary key.