Ограничение UNIQUE не сработало: customuser.username
Я пытаюсь разобраться в drf. Я установил все конечные точки, и они работают, единственное, что не работает, это когда я хочу отправить что-то в базу данных, первый пост проходит нормально, а второй показывает ошибку целостности, я застрял уже несколько дней, хаха. Может кто-нибудь помочь мне понять, что я упускаю
models.py :
class CustomUser(AbstractUser):
name = models.CharField(max_length=30)
email = models.EmailField(default ="no email")
first_name = models.CharField(max_length = 25 ,default = 'No name')
last_name = models.CharField(max_length = 25, default = 'No surname')
password = models.CharField(max_length = 25,default = "no password")
def __str__(self):
return self.name
views.py
class CustomModelViewSet(ModelViewSet):
serializer_class = UserSerializer
queryset = CustomUser.objects.all()
@api_view(['GET', 'POST'])
def user_list(request,format =None):
#get all users
#serialize them
#return json
if request.method == 'GET':
allUser = CustomUser.objects.all()
serializer = UserSerializer(allUser, many=True)
return Response(serializer.data)
elif request.method =='POST':
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)
@api_view(['GET','PUT','DELETE'])
def user_detail(request,id,format =None):
try:
user = CustomUser.objects.get(pk=id)
except CustomUser.DoesNotExist:
return Response(status.HTTP_404_NOT_FOUND)
if request.method == 'GET':
serializer = UserSerializer(user)
return Response(serializer.data)
elif request.method == 'PUT':
serializer = UserSerializer(user, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
elif request.method == 'DELETE':
user.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
serializers.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = CustomUser
fields = ['id','email','password','first_name','last_name']
Когда вы наследуете от класса AbstractUser
, вы наследуете и свойства/поля класса, такие как email, имя пользователя и т.д.
username
является обязательным и по умолчанию принимает значение Unique.
Чтобы изменить его, необходимо установить username
на None
:
username = None
class CustomUser(AbstractUser):
name = models.CharField(max_length=30)
email = models.EmailField(default ="no email")
first_name = models.CharField(max_length = 25 ,default = 'No name')
last_name = models.CharField(max_length = 25, default = 'No surname')
password = models.CharField(max_length = 25,default = "no password")
username = None
Затем выполните makemigrations и migrate.