2016-11-13 14 views
0

I持っている二つのモデルジャンゴ残りのフレームワークモデルの外部キー

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

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

と私は2つのシリアライザ持っている:私はこのような項目の配列と順序を投稿

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."] 

最初に注文を作成して後でこの注文IDで商品を作成するにはどうすればよいですか?

答えて

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が追加され、別の方法があり、required field error

は、この問題を解決しextra_kwargsを追加する原因となる代わりにManyToManyのに使用されForeignKeyのフィールドにnull = Trueで

order = models.ForeignKey(Order, related_name='items', null=True) 
関連する問題