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.

Reply via email to