slug = SerializerMethodField()
def validate(self, data):
- # see https://github.com/encode/django-rest-framework/issues/7173
+ # TODO: remove pending https://github.com/encode/django-rest-framework/issues/7173
name = data["name"] if "name" in data else self.instance.name
owner = (
data["owner"]
"data_type",
]
+ def validate(self, attrs):
+ # TODO: remove pending https://github.com/encode/django-rest-framework/issues/7173
+ name = attrs["name"] if "name" in attrs else self.instance.name
+ if ("name" in attrs) and self.Meta.model.objects.filter(
+ name=name,
+ ).exists():
+ raise serializers.ValidationError(
+ {"error": "Object violates name unique constraint"},
+ )
+ return super().validate(attrs)
+
class ReadWriteSerializerMethodField(serializers.SerializerMethodField):
"""
self.assertEqual(data["name"], name)
self.assertEqual(data["data_type"], field_type)
+ def test_create_custom_field_nonunique_name(self):
+ """
+ GIVEN:
+ - Custom field exists
+ WHEN:
+ - API request to create custom field with the same name
+ THEN:
+ - HTTP 400 is returned
+ """
+ CustomField.objects.create(
+ name="Test Custom Field",
+ data_type=CustomField.FieldDataType.STRING,
+ )
+
+ resp = self.client.post(
+ self.ENDPOINT,
+ data={
+ "data_type": "string",
+ "name": "Test Custom Field",
+ },
+ )
+ self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)
+
def test_create_custom_field_instance(self):
"""
GIVEN: