#35588: Migrating primary key to UUIDField causes serializer validation issues -------------------------------------+------------------------------------- Reporter: DaanSterk | Type: Bug Status: new | Component: Core | (Serialization) Version: 4.1 | Severity: Normal Keywords: | Triage Stage: | Unreviewed Has patch: 0 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 -------------------------------------+------------------------------------- For application-specific performance considerations, we recently decided to migrate our primary keys from BigAutoField to UUIDField.
{{{ class BaseModel(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) }}} All models extend BaseModel. For example: {{{ class Message(BaseModel): messenger = models.ForeignKey('core.PersonBusinessUmbrella', on_delete=models.CASCADE) }}} There is a lot of (writable) nesting involved in our serializers. For example: {{{ class CustomModelSerializer(ModelSerializer): created_at = serializers.DateTimeField(required=False, allow_null=True) class MessageSerializer(CustomModelSerializer): messenger = PersonBusinessUmbrellaSerializer(required=False) class PersonBusinessUmbrellaSerializer(CustomModelSerializer): business_umbrella = BusinessUmbrellaSerializer() class BusinessUmbrellaSerializer(CustomModelSerializer): ... }}} All data retrieval continues to work normally. However, when sending POST/PUT requests with that same data structure to the corresponding ModelViewSet, issues arise. **POST-ing a new Message, including nested models** {{{ { "uuid": "36d562d9-5127-4591-a532-3900c639156a", "relatedFiles": [], "order": "00e204d9-ef4e-482c-bd5d-8a4129450728", "messenger": { "id": "b3756ec6-d793-4a4e-88f7-5826e38f83d3", "uuid": "9141eb64-2067-4e22-adb7-4d51d7723565", "createdAt": "2024-07-09T09:38:22.906", "updatedAt": "2024-07-09T09:38:22.906", "person": { "id": "445da4a0-9ab6-4bad-9d83-40e9215d269f", "uuid": "d74e9c15-9e0d-429e-b9e8-d63c5d68edc7", "createdAt": "2024-07-09T09:38:22.229", "updatedAt": "2024-07-09T09:38:22.229", "businessUmbrellas": [ { "id": "b0cfda01-80df-456c-9603-1b9d68b67270", "uuid": "51007185-c51b-4dd9-b5ff-d615706abc25", "createdAt": "2024-07-09T09:38:22.129", "updatedAt": "2024-07-09T09:38:22.129", "name": "Bouwman", "comment": null } ], "firstName": "Adam", "lastName": "Willems", "phoneNumber": "0611666677" }, "businessUmbrella": { "id": "b0cfda01-80df-456c-9603-1b9d68b67270", "uuid": "51007185-c51b-4dd9-b5ff-d615706abc25", "createdAt": "2024-07-09T09:38:22.129", "updatedAt": "2024-07-09T09:38:22.129", "name": "Bouwman", "comment": null }, "email": "adrian...@example.net", "phoneNumber": null, "roles": [ { "id": "a75be758-b0f1-45b3-8c8b-f77136d133b0", "uuid": "40d0e317-fdbf-4923-842f-8e665863ec26", "createdAt": "2024-07-09T09:38:25.928", "updatedAt": "2024-07-09T09:38:25.928", "personBusinessUmbrella": "b3756ec6-d793-4a4e- 88f7-5826e38f83d3", "type": 2, "defaultMachine": { "id": "3fc4f1ce-9293-4d8c-a5f8-fa710024815e", "uuid": "7bc16327-07ac-4df2-8c40-4adaa206163d", "createdAt": "2024-07-09T09:38:22.198", "updatedAt": "2024-07-09T09:38:22.198", "name": "Heftruck-hebben" } } ] }, "body": "abc" } }}} **Response** {{{ { "messenger": { "nonFieldErrors": [ "‘OrderedDict({'created_at': datetime.datetime(2024, 7, 9, 9, 38, 22, 129000), 'uuid': UUID('51007185-c51b-4dd9-b5ff-d615706abc25'), 'name': 'Bouwman', 'comment': None})’ is geen geldige UUID." ] } } }}} Whereas with BigAutoField the serializer validation would understand that the nested OrderedDict represented an entity, it now insists on receiving an actual UUID value. -- Ticket URL: <https://code.djangoproject.com/ticket/35588> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/010701909c6b4ccd-84b1b4a2-139f-4fdf-9fdc-619de284aaeb-000000%40eu-central-1.amazonses.com.