【发布时间】:2018-06-11 14:19:58
【问题描述】:
我有一个自定义用户模型如下:
class Librarian(models.Model):
user = models.OneToOneField(User)
phone = models.CharField(max_length=30, blank=True)
# A library has many librarians
which_library = models.ForeignKey('Library', related_name='librarians', on_delete=models.CASCADE)
我已经编写了如下的序列化器:
class LibrarianSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='user.username')
email = serializers.CharField(source='user.email')
password = serializers.CharField(source='user.password')
class Meta:
model = Librarian
#fields = '__all__'
fields = ('id', 'username', 'email', 'password', 'phone', 'which_library')
def update(self, instance, validated_data):
instance.user.email = validated_data.get('user.email', instance.user.email)
instance.user.password = validated_data.get('user.password', instance.user.password)
instance.phone = validated_data.get('phone', instance.phone)
instance.which_library = validated_data.get('which_library', instance.which_library)
instance.save()
return instance
def create(self, validated_data):
print('ok')
return Librarian.objects.create(**validated_data)
它的观点:
@api_view(['POST'])
def librarian(request, library_id):
"""
Create a new librarian for a specific library
"""
if request.method == 'POST':
print('View')
serializer = LibrarianSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(
serializer.errors, status=status.HTTP_400_BAD_REQUEST)
我正在使用以下 JSON 数据向相应的 URL 发出 POST 请求:
{
"username": "sample",
"email": "sample@gmail.com",
"password": "12345678",
"phone": "12345",
"which_library": "1"
}
它向我抛出 Cannot assign "{u'username': u'sample', u'password': u'12345678', u'email': u'sample@gmail.com'}": "Librarian.user" must be a "User" instance 错误。
我的目标是创建一个图书管理员(必须自动创建一个用户),这就是我发送用户名、密码和电子邮件字段的原因。我做错了什么?
【问题讨论】:
标签: django django-rest-framework