django - 如何在 Django REST API 的序列化程序中使用 2 个模型?
问题描述
我最近才开始使用 Django Rest Framework,想知道如何在单个序列化程序中使用 2 个模型。我有一个名为“配置文件”的自定义模型,并且还使用了默认的 Django 模型“用户”。对于这两个表,我计划使用嵌套表示。最后,为了测试 RegisterAPI,我想使用 POSTMAN 工具创建数据,但目前它没有按预期工作。
这是我到目前为止所做的:
模型.py:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete = models.CASCADE)
company = models.CharField(max_length=100, blank=True, null=True)
address = models.TextField()
视图.py:
class RegisterAPI(APIView):
permission_classes = [AllowAny]
def post(self, request, format=None):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
content = {
'result': 'Thanks for registering!'
}
return Response(content, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
序列化程序.py:
from rest_framework import serializers
from myapp.models import Profile
from django.contrib.auth.models import User
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ['company', 'address']
class UserSerializer(serializers.ModelSerializer):
profile = ProfileSerializer(many = True)
class Meta:
model = User
fields = ['username', 'email', 'password', 'profile']
def create(self, validated_data):
profile_data = validated_data.pop('profile')
password = validated_data.pop('password', None)
# instance = self.Meta.model(**validated_data)
user = User.objects.create(**validated_data)
if password is not None:
user.set_password(password)
user.save()
Profile.objects.create(user = user, **profile_data)
return user
在 POSTMAN 中,我无法为 Profile 序列化程序设置“公司”和“地址”字段。我怎样才能做到这一点?
解决方案
推荐阅读
- javascript - Chart.js - 条形值显示在条形的中间
- https - Apache Camel https4 客户端未对 keepAlive=true 的多个请求使用相同的 tcp 端口
- sql-server - SQL Azure 很慢
- qt - 如何让qml TableView行高动态适应内容
- debugging - 使用庞巴迪进行服务器基准测试 - 但无法添加主体参数
- wordpress - 无法通过电子邮件 wordpress 搜索
- django - Django 从 UDP 接收数据并存储在 DB 中,前提是来自 websockets 的条件设置为 true
- excel - 表字段类型和长度矛盾(?) Timestamp(6)WithLocalTimeZone and Length=11
- python - Python - ValueError:解包的值太多(预期为 2)二维数组
- javascript - Angular 6 - Rxjs 订阅 QueryList 更改中的最后一个事件?