2016-11-13 3 views
0

У меня есть две моделиДжанго рамки остальные модели внешнего ключа

class Order(models.Model): 
    fields... 

class OrderItem(models.Model): 
    fiels... 
    order = models.ForeignKey(Order, related_name='items') 

и у меня есть два сериализаторы:

class CreateOrderItemSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = OrderItem 
     resource_name = 'order-item' 
     fields = ('order', 'count') 
    ..... 
class OrderSerializer(serializers.ModelSerializer): 
    items = CreateOrderItemSerializer(many=True) 
    class Meta: 
     model = Order 
     resource_name = 'order' 
     fields = ('id','items') 

Я разместил заказ с элементами массива, как это:

{ 
    'ordername': 'foo', 
    'items': [{ 
     'name': 'foo1', 
     },{ 
     'name': 'foo2', 
     }, 
     ] 
} 

Но У меня есть ошибка:

"order":["This field is required."] 

Как я могу создать заказ позже, создавая элементы с помощью этого заказа?

ответ

0

мой собственный ответ на вопрос: первым добавить extra_kwargs к пункту сериализатором:

class CreateOrderItemSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = OrderItem 
     resource_name = 'order-item' 
     fields = ('order', 'count') 
     extra_kwargs = { 
      'order': {'required': False}, 
     } 

после оных создать метод orderserializer:

def create(self, validated_data): 
    items_data = validated_data.pop('items') 
    order = Order.objects.create(**validated_data) 
    for item in items_data: 
     item_name = item['name'] 
     item, created = OrderItem.objects.get_or_create(order=order,name=item_name) 
    return order 
0

Существует хорошее решение здесь Django Rest Framework writable nested serializers который это почти такая же проблема здесь.

Разница здесь ForeignKey используется вместо ManyToMany который заставит required field error

добавив extra_kwargs решить эту проблему, есть еще один способ, который добавляют нуль = True в ForeignKey поле

order = models.ForeignKey(Order, related_name='items', null=True) 
Смежные вопросы