I experience a bug with DRF 3.16.0.
I created a minimal example:
# model.py
from django.db.models import CharField, IntegerField, Model,
UniqueConstraint
class MyModel(Model):
class Meta:
abstract = True
foo = IntegerField(null=True, blank=True)
bar = CharField(max_length=100)
class ModelWithoutUniqueConstraint(MyModel):
pass
class ModelWithUniqueConstraint(MyModel):
class Meta:
constraints = [UniqueConstraint(fields=("bar", "foo"),
name="unique_bar_and_foo", nulls_distinct=False)]
# view_rest.py
from rest_framework.fields import SerializerMethodField
from rest_framework.serializers import ModelSerializer
from rest_framework.viewsets import ReadOnlyModelViewSet
from myapp.models import ModelWithoutUniqueConstraint,
ModelWithUniqueConstraint
class BaseModelSerializer(ModelSerializer):
class Meta:
fields = ("id", "foo", "bar")
foo = SerializerMethodField()
@staticmethod
def get_foo(obj: ModelWithUniqueConstraint) -> int | None:
return obj.foo
class ModelWithUniqueConstraintSerializer(BaseModelSerializer):
class Meta(BaseModelSerializer.Meta):
model = ModelWithUniqueConstraint
class ModelWithoutUniqueConstraintSerializer(BaseModelSerializer):
class Meta(BaseModelSerializer.Meta):
model = ModelWithoutUniqueConstraint
class ModelWithUniqueConstraintViewSet(ReadOnlyModelViewSet):
queryset = ModelWithUniqueConstraint.objects.all()
serializer_class = ModelWithUniqueConstraintSerializer
class ModelWithoutUniqueConstraintViewSet(ReadOnlyModelViewSet):
queryset = ModelWithoutUniqueConstraint.objects.all()
serializer_class = ModelWithoutUniqueConstraintSerializer
In the result of ModelWithUniqueConstraintViewSet the field "foo" is lost
whith DRF 3.16. while it works with 3.15.2
My current dependencies are:
asgiref==3.8.1
attrs==25.3.0
django==5.1.7
djangorestframework==3.16.0
drf-spectacular==0.28.0
inflection==0.5.1
jsonschema==4.23.0
jsonschema-specifications==2024.10.1
pyyaml==6.0.2
referencing==0.36.2
rpds-py==0.24.0
sqlparse==0.5.3
typing-extensions==4.13.0 ; python_full_version < '3.13'
tzdata==2025.2 ; sys_platform == 'win32'
uritemplate==4.1.1
--
You received this message because you are subscribed to the Google Groups
"Django REST framework" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/django-rest-framework/7922c7ed-15b2-4544-b6a7-c959df9af55an%40googlegroups.com.