ネストされたシリアライザを書くためのDjango Restドキュメントに従っていますが、それは私に属性エラーを与えています。ここでAttributeError with Djangoレストネストされたシリアライザ
は私のモデルです:ここでは
class Objects(TimeStampModel):
projects = models.ForeignKey(Projects,related_name='proj_obj',on_delete=models.CASCADE)
object_name = models.CharField(max_length=50)
object_description = models.TextField()
object_main_table = models.CharField(max_length=50)
object_primary_key = models.CharField(max_length=50)
object_age_field = models.CharField(max_length=50)
date_format = models.CharField(max_length=50)
def __str__(self):
return self.object_name
class ObjectDefinition(TimeStampModel):
ATTRIBUTE = 'Attribute'
RELATION = 'Relation'
TYPE_CHOICES = (
(ATTRIBUTE, 'Attribute'),
(RELATION, 'Relation'),
)
obj = models.ForeignKey(Objects,related_name='obj_def',on_delete=models.CASCADE)
from_table = models.CharField(max_length=50)
from_table_field = models.CharField(max_length=50)
to_table = models.CharField(max_length=50)
to_table_field = models.CharField(max_length=50)
relation_type = models.CharField(max_length=50,choices=TYPE_CHOICES)
relation_sequence = models.CharField(max_length=50)
value_field = models.CharField(max_length=50, blank=True, null=True)
は私のserializers.pyスニペットです:
class ObjectDefinitionSerializer(serializers.ModelSerializer):
class Meta:
model = ObjectDefinition
fields = ('from_table','from_table_field','to_table','to_table_field','relation_type','value_field')
class ObjectSerializer(serializers.ModelSerializer):
definition = ObjectDefinitionSerializer(many=True)
object_description = serializers.CharField(required=False, allow_null=True, allow_blank=True
)
class Meta:
model = Objects
fields = ('projects','object_name','object_description','object_main_table','object_primary_key','object_age_field','date_format','definition')
def validate(self, data, *args, **kwargs):
date_format = data.get('date_format')
if date_format not in ['YYYYMMDD', 'DDMMYYYY']:
msg = ('Date format is incorrect')
raise serializers.ValidationError({'error_msg': msg})
return super(ObjectSerializer, self).validate(data, *args, **kwargs)
def create(self, validated_data):
definition_data = validated_data.pop('definition')
obj = Objects.objects.create(**validated_data)
for data in definition_data:
ObjectDefinition.objects.create(obj=obj, **data)
return obj
私のviews.py:
class CreateObject(CreateAPIView):
permission_classes = (IsAuthenticated,)
serializer_class = ObjectSerializer
POST、objects.createを打った後、両方のモデルでうまく動作しますが、objの返り値でこのエラーが表示されます:
例外値:
ガットはAttributeErrorシリアライザObjectSerializer
にフィールドdefinition
の値を取得しよう。 シリアライザフィールドの名前が正しくない可能性があり、Objects
インスタンスの属性またはキーと一致しない可能性があります。 元の例外テキストは 'Objects'オブジェクトには属性 'definition'がありませんでした。
私には何が欠けていますか?
は、はい、私はそれを試してみましたが、それは私を与える:例外の種類:\t KeyError例外 例外値を:\t 「定義」 –
はい、それを持って、する必要があり定義の代わりにobj_defをポップします。今すぐ動作します。したがって、関連する名前フィールドが指定されている場合は、ソース属性が必要です。助けてくれてありがとう。 :) –
本当に、それを逃した。あなたがうまく働いてうれしい。 – Linovia