我创建了一个Author
模型,其中它与默认Django用户具有OneToOne
关系,如下所示:
from django.contrib.auth.models import User
from django.db import models
class Author(models.Model):
user = models.OneToOneField(
User,
related_name='author',
on_delete=models.CASCADE,
default="",
)
is_author = models.BooleanField(
default=True
)
在这里,我创建了以下视图集:
class AuthorViewSet(viewsets.ModelViewSet):
serializer_class = AuthorSerializer
queryset = Author.objects.all()
def get_permissions(self):
if self.action == "list" or self.action == "retrieve" or self.action == "update":
self.permission_classes = [IsCurrentOwner, permissions.IsAdminUser]
elif self.action == "create":
self.permission_classes = [permissions.AllowAny]
return super(AuthorViewSet, self).get_permissions()
问题是否有任何方法可以在一个步骤(请求)中同时创建user
和author
?怎么做
序列化程序代码:
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = Author
fields = "__all__"
extra_kwargs = {
'password': {'write_only': True},
'id': {'read_only': True}
}
我尝试了以下请求,但无效
#url: localhost:8000/users/
#method: POST
{
"user": {
"username": "mostafa",
"password": "1"
}
}
错误:
{
"user": [
"Incorrect type. Expected pk value, received dict."
]
}
为此,您需要为用户创建另一个序列化程序:
然后,将
AuthorSerializer
中的user字段设置为UserSerializer
的实例,并以以下方式重写create方法:用于请求负载的curl脚本:
其答复如下:
相关问题 更多 >
编程相关推荐