Skip to content

unique=True validation not working with models.CharField with choices #5004

Closed
@Ekluv

Description

@Ekluv

Checklist

  • I have verified that that issue exists against the master branch of Django REST framework.
  • I have searched for similar issues in both open and closed tickets and cannot find a duplicate.
  • This is not a usage question. (Those should be directed to the discussion group instead.)
  • This cannot be dealt with as a third party library. (We prefer new functionality to be in the form of third party libraries where possible.)
  • I have reduced the issue to the simplest possible case.
  • I have included a failing test as a pull request. (If you are unable to do so we can still accept the issue.)

Steps to reproduce

Lets take a model

MY_CHOICES = (
    ('choice1', _('choice 1')),
    ('choice2', _('choice 1')),
)

class Poll(models.Model):
    form_name = models.CharField('name', max_length=254,
                                 unique=True, choices=MY_CHOICES)

class PollSerializer(serializers.ModelSerializer):
	class Meta:
		model = Poll
		fields = '__all__'

class PollCreateView(generics.CreateAPIView):
	serializer_class = PollSerializer

Then making a POST request with {"form_name": "choice1"} first time returns { "id": 1, "form_name": "choice1" }

then by making same request again with data {"form_name": "choice1"} instead of giving valid error response, django's IntegrityError exception is thrown.

This behaviour is only coming if models.CharField is used with choices and unique=True and not when models.CharField is used without choices

Expected behavior

Valid error response should be returned instead of throwing django's IntegrityError exception
like { "form_name": [ "poll with this name already exists." ] }

Actual behavior

Throwing django's IntegrityError exception when models.CharField is used with choices and unique=True

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions