Opened 9 months ago
Closed 9 months ago
#35348 closed Bug (needsinfo)
Inconsistent behaviour with annotate using concat and GenericIPAddressField
Reported by: | Lorenzo Morandini | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 4.2 |
Severity: | Normal | Keywords: | |
Cc: | Lorenzo Morandini | Triage Stage: | Unreviewed |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Concat function behaviour changed from django 3 to django 4 together with GenericIPAddressField. In django 3 it would output only the ip address, now a /32 is included too by default
Example model
class Example(models.Model): ip_address = models.GenericIPAddressField( _('ip address'), db_index=True, protocol='IPv4' ) mask = models.PositiveIntegerField( _('mask'), ) Example.objects.all() .annotate( main_ip=Concat( 'ip_address', V('/') 'mask' ) )
With an example item with ip 192.168.1.1 and mask 30 the output would be:
in django 3 main_ip: 192.168.1.1/30
in django 4 main_ip: 192.168.1.1/32/30
Is this an expected behaviour? Happens only with concat, an annotate of the ip_address field only produces the output '192.168.1.1'.
Note:
See TracTickets
for help on using tickets.
Hi Lorenzo, thank you for this report.
I am struggling to replicate this locally and need a few more details. To help me, please provide:
We use ipaddress from the Python standard library and
/32
is documented as a default mask forIPv4Network
, hence the version of Python might be important here and whether this changed while upgrading.If you want to make my day, you could write a regression test which will help verify the issue and make sure it gets resolved quickly.