2017-06-27 11 views
0

私は、ネストされた関係をシリアル化しようとしているが、要求からモデルを作成中にエラーが発生しましたよ:'MeasureUnit' object has no attribute 'unit'ジャンゴ休憩 - カントのアイテムをシリアライズ

私が間違って何をしているのですか?私はモデルMeasureItemを作成しようとしていますが、なんとかMeasureUnitにエラーがあります。

マイモデル:

from django.db import models 
from measure_unit.models import MeasureUnit 
from main_user.models import MainUser 

class Item(models.Model): 
    code = models.CharField(unique=True, max_length=15) 
    current_code = models.CharField(blank=True, null=True, max_length=15) 

    title = models.CharField(default='', max_length=100) 
    description = models.TextField(blank=True, null=True) 

    measure_units = models.ManyToManyField(MeasureUnit, through='MeasureItem', through_fields=('item', 'unit'), blank=True) 

    class Meta: 
     ordering = ('created_at',) 

class MeasureItem(models.Model): 
    item = models.ForeignKey(Item, on_delete=models.CASCADE, blank=True, null=True) 
    unit = models.ForeignKey(MeasureUnit, on_delete=models.CASCADE, blank=True, null=True) 
    quantity = models.IntegerField(default=0) 

    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 

    class Meta: 
     ordering = ('created_at',) 

マイシリアライザ:

from rest_framework import serializers 
from .models import Item, MeasureItem 

class MeasureUnitSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = MeasureItem 
     fields = ('id', 'unit') 

class ItemAdminSerializer(serializers.ModelSerializer): 

    measure_units = MeasureUnitSerializer(many=True) 

    class Meta: 
     model = Item 
     fields = ('id', 'code', 'current_code', 'title', 'description', 'measure_units') 

    def create(self, validated_data): 
     units_data = validated_data.pop('measure_units') 
     item = Item.objects.create(**validated_data) 

     for unit_data in units_data: 
      try: 
       measure_unit = unit_data['unit'] 
       MeasureItem.objects.create(unit=measure_unit, item=item) 
      except Exception as e: 
       print(str(e)) 
       return item 
     return item 

答えて

1

MeasureUnitSerializerMeasureItemモデルのModelSerializerですが、ItemAdminSerializerMeasureUnitモデルのためにそれを使用します。

measure_units = MeasureUnitSerializer(many=True) 

MeasureUnitので、はありませんフィールドにエラーが表示されます。 )私の一日の%を保存するための

measure_units = MeasureUnitSerializer(source='measureitem_set', many=True) 
+1

Thxを: あなたはmeasure_unitsフィールドのsource引数を指定しようとすることができ –

関連する問題