Checklist
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
Checklist
masterbranch of Django REST framework.Steps to reproduce
Lets take a model
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