Я хочу использовать вложенный сериализатор для заказа с содержимым заказа, но получаю ошибку атрибута
согласно Дополнительные поля сериализатора в Django REST Framework 3 это потому, что поле ordercontent не в порядкеmodel
Я искал добавление немодельного поля в сериализатор Добавление немодельного поля на ModelSerializer в DRF 3 , но все равно получаю ошибку
один интересныйдело в том, что он не выдает ошибок в python manage.py shell
serializers.py
class OrderContentSerializer(ModelSerializer):
class Meta:
model = OrderContent
fields = ('price',)
class OrderSerializer(ModelSerializer):
order_contents = OrderContentSerializer(many=True)
class Meta:
model = Order
fields = ('total_price', 'order_status', 'order_contents')
def create(self, validated_data):
contents_data = validated_data.pop('order_contents')
order = Order.objects.create(**validated_data)
for data in contents_data:
OrderContent.objects.create(order=order, **data)
return order
views.py
class CreateOrderCustomer(APIView):
# permission_classes = (IsAuthenticated,)
def post(self, request):
print(request.data)
serializer = serializers.OrderSerializer(data=request.data)
print(request.data)
if serializer.is_valid():
print(request.data)
print(request.user)
serializer.save(created_by=request.user)
return Response(data=serializer.data,status= status.HTTP_201_CREATED)
return Response(data=serializer.errors,status=status.HTTP_400_BAD_REQUEST)
я использовал оболочку python manage.py, которая успешносоздал заказ
>>> from orders.serializers import OrderSerializer
>>> data={'totalprice': 3.0, 'order_status': 0, 'order_contents': [{'price': 18}, {'price': 12}]}
>>> serializer=OrderSerializer(data=data)
>>> serializer.is_valid()
True
>>> from users.models import User
>>> user=User.objects.get(username='1')
>>> serializer.save(created_by=user)
<Order: order7>
, но выполнение той же самой конечной точки представлений с теми же данными дает мне
AttributeError: Получил AttributeError при попытке получить значение для поля order_contents
на сериализаторе OrderSerializer
,Поле сериализатора может иметь неправильное имя и не соответствовать ни одному атрибуту или ключу в экземпляре Order
.Исходный текст исключения был: у объекта 'Order' нет атрибута 'order_contents'.