【发布时间】:2020-11-18 23:13:14
【问题描述】:
我在尝试在 DRF 和序列化程序中实现对 POST 请求的处理时遇到了很大的麻烦。我遇到的错误如下;
当我尝试调试问题时,偶尔会成功处理请求。我真的很困惑。
AttributeError:尝试获取值时出现 AttributeError 序列化程序
FreightCreateSerializer上的字段equipment_types。这 序列化器字段可能命名不正确且不匹配任何Freight实例上的属性或键。原始异常文本 原为:“Freight”对象没有“FreightEquipmentType_set”属性。
我的模特是;
class EquipmentType(model.Model):
name = models.CharField(max_length=100)
description = models.CharField(max_length=250)
class Freight(model.Model):
name = models.CharField(max_length=250)
equipment_types = models.ManyToManyField(EquipmentType, through='FreightEquipmentType')
class FreightEquipmentType(model.Model):
equipment_type = models.ForeignKey(
EquipmentType,
on_delete=models.CASCADE
)
freight = models.ForeignKey(
Freight,
on_delete=models.CASCADE
)
quantity = models.DecimalField(max_digits=18, decimal_places=2, default= 0)
我的序列化器是,
class EquipmentTypeSerializer(serializers.ModelSerializer):
class Meta:
model = EquipmentType
fields = "__all__"
class FreightEquipmentTypeSerializer(serializers.ModelSerializer):
class Meta:
model = FreightEquipmentType
fields = ('equipment_type', 'quantity', )
class FreightCreateSerializer(serializers.ModelSerializer):
equipment_types = FreightEquipmentTypeSerializer(many=True, source='FreightEquipmentType_set', read_only=False)
class Meta:
model = Freight
fields = "__all__"
def create(self, validated_data):
equipment_types_validated_data = validated_data.pop('FreightEquipmentType_set')
freight = Freight.objects.create(**validated_data)
equipment_type_serializer = self.fields['equipment_types']
for each in equipment_types_validated_data:
each['freight'] = freight
equipment_types = equipment_type_serializer.create(equipment_types_validated_data)
return freight
我想处理以下发帖请求。
{
"name": "0",
"equipment_types": [{
"equipment_type": "8a9c1f57-c6c9-4bfa-84a8-2082d6c3d112",
"quantity": 2
}, {
"equipment_type": "7242a8fb-3eba-4988-98fa-806c21562101",
"quantity": 3
}]
}
非常感谢任何帮助。
【问题讨论】:
标签: django post serialization django-rest-framework many-to-many