python - 嵌套创建序列化程序中的 Django Rest Framework 错误
问题描述
我正在尝试使用嵌套的序列化程序将信息插入到数据库中,但我有错误
- Django 3.2
- djangorestframework 3.12.4
虚拟模型
class Supplier(models.Model):
name = models.CharField(max_length=250)
class SupplierContacts(models.Model):
supplier = models.ForeignKey(
'Supplier',
related_name='contacts',
on_delete=models.CASCADE
)
last_name = models.CharField(max_length=50)
class SupplierUsers(models.Model):
supplier = models.ForeignKey(
'Supplier',
related_name='users',
on_delete=models.CASCADE
)
last_name = models.CharField(max_length=50)
虚拟序列化器
class SupplierSerializer(serializers.ModelSerializer):
users = SupplierUserSerializer()
contacts = SupplierContactsSerializer(many=True)
class Meta:
model = Supplier
fields = [
'name',
'users',
'contacts'
]
def create(self, validated_data):
users_data = validated_data.pop('users')
contacts_data = validated_data.pop('contacts')
supplier = Supplier.objects.create(**validated_data)
SupplierUsers.objects.create(supplier=supplier, **users_data)
for contact in contacts_data:
SupplierContacts.objects.create(supplier=supplier, **contact)
return supplier
在视图中自定义创建这样
class ViewSet(mixins.CreateModelMixin,
viewsets.GenericViewSet):
queryset = Supplier.objects.all()
serializer_class = SupplierSerializer
def create(self, request, *args, **kwargs):
# import ipdb
# ipdb.set_trace()
serializer = SupplierSerializer(data=request.data)
if serializer.is_valid():
serializer.save() # here works saved to db
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
我正在按照文档中的说明进行操作,但出现以下错误。
AttributeError: Got AttributeError when attempting to get a value for field `last_name` on serializer `SupplierUserSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `RelatedManager` instance.
Original exception text was: 'RelatedManager' object has no attribute 'last_name'.
数据已保存,问题在于反序列化 =>serializer.data
有任何想法吗?
解决方案
推荐阅读
- angular - Angular 单元测试:服务函数返回的值
- google-cloud-pubsub - pubsub.projects.subscriptions.pull 失败并出现 INVALID_ARGUMENT
- sql - 用一个查询从不同的表中计数
- c++ - CERN ROOT:为命名空间中的外部“C”结构生成流光
- javascript - 操作列按钮在过滤 vuetable 时不会改变
- c - 奇怪的 fork() 行为(之前的 printf 被召回)
- windows - Powershell:通过 powershell 更新快捷方式的热键不起作用
- excel - 使用 VBA 检查用户名是否存在于范围内
- azureservicebus - 在 Azure 服务总线 SubscriptionClient 中,什么样的异常会重试?
- azure - 用于更新 Cloud DL 的 NOTES 字段的 Powershell 命令