Я действительно застрял на несколько часов.
У меня есть следующий UserSerializer: UserModel = get_user_model ()
class UserSerializer(serializers.ModelSerializer):
def create(self, validated_data):
user = get_user_model().objects.create(
username=validated_data['username']
)
user.set_password(validated_data['password'])
user.save()
return user
class Meta:
model = UserModel
fields = ('id', 'username', 'deliveries', 'password')
И это, на мой взгляд:
class UserList(APIView):
def post(self, request, format=None):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data,
status=status.HTTP_201_CREATED)
return Response(serializer.data, status=status.HTTP_400_BAD_REQUEST)
Я использую стандартную модель пользователя Django.Но я не могу отправить запрос http.создать пользователя.Я всегда получаю "400_BAD_REQ"
Мой запрос в httpie выглядит следующим образом:
http -v POST http://127.0.0.1:8000/user/user-list/ username="Rudy" password="12345"
С другими моделями у меня нет этих проблем.Может кто-нибудь сказать мне, почему это не работает?
РЕДАКТИРОВАТЬ: Как писал Шакил, проблема действительно была с указанными полями, но даже при объявлении полей read_only это не работает, как ожидалось.
Не работает
class UserSerializer(serializers.ModelSerializer):
def create(self, validated_data):
user = UserModel.objects.create(
username=validated_data['username']
)
user.set_password(validated_data['password'])
user.save()
return user
class Meta:
model = UserModel
fields = ('id', 'deliveries', 'username', 'password')
read_only = ('id', 'deliveries',)
write_only = ('password',)
Это работает:
class RegistrationSerializer(serializers.ModelSerializer):
def create(self, validated_data):
user = UserModel.objects.create(
username=validated_data['username']
)
user.set_password(validated_data['password'])
user.save()
return user
class Meta:
model = UserModel
fields = ('username', 'password',)
Поставки - это PrimaryKeyRelatedField.