Python 如何在包含另一个序列化程序(模型)django rest框架的序列化程序中创建自定义列表字段?
我需要在另一个模型序列化程序中使用一个模型序列化程序的列表,我尝试使用Python 如何在包含另一个序列化程序(模型)django rest框架的序列化程序中创建自定义列表字段?,python,django,django-rest-framework,django-serializer,Python,Django,Django Rest Framework,Django Serializer,我需要在另一个模型序列化程序中使用一个模型序列化程序的列表,我尝试使用SerializerMethodField(),但没有成功。因此我有以下代码: models.py 和serializers.py: 我想要的是: 我现在所拥有的: 您必须更新TyresGroupSerializer,如下所示 class TyresGroupSerializer(serializers.ModelSerializer): tyres = TyreSerializer(source='get_tyres
SerializerMethodField()
,但没有成功。因此我有以下代码: models.py 和serializers.py: 我想要的是: 我现在所拥有的:
您必须更新
TyresGroupSerializer
,如下所示
class TyresGroupSerializer(serializers.ModelSerializer):
tyres = TyreSerializer(source='get_tyres', many=True)
def get_tyres(self, instance):
queryset = Tyre.objects.filter(group=instance)
return queryset
class Meta:
model = TyresGroup
fields = ['id', 'code', 'brand', 'tyres']
您可以在TyresGroupSerializer中使用SerializerMethodField()字段,如下所示
class TyresSerializer(serializers.ModelSerializer):
images = ImagesSerializer(many=True)
tyregroups = serializers.SerializerMethodField(read_only=True) # If you do not want to write data of Tyre object otherwise you can set it to False
def get_tyregroups(self, instance):
serializer_class = TyreGroupSerializer(instance.group, many=True)
serialized_data = serializer_class.data
return serialized_data
class Meta:
model = Tyres
fields = ['id', 'group', 'images', 'type', 'tyregroups'] # add all other fields which you want to in json
class TyresGroupSerializer(serializers.ModelSerializer):
class Meta:
model = TyresGroup
fields = '__all__'
得到了这样一个错误
TypeError在/api/groups/Object的Tyre不是JSON可序列化的
你必须为Tyre
创建serializer类
。我已经,上面提到过你正在调用/api/groups/
,在TyreGroup
模型中没有Tyre
的外键,所以,它不会得到轮胎
对象。但是我的架构是这样做的,因为它不可能移动轮胎
,它与图像
和轮胎组
相连,上面的模型TyresGroup
哪个是get:namererror at/api/groups/name'obj'未定义
在用'obj'get'更改'instance'后:AttributeError at/api/groups/'TyresGroup'对象没有属性'Tyre'
好的,我认为需要在TyreSerializer()中使用SerializerMethodField()。我会更新答案的。@AbubakrAbduvakhidov刚刚更新了答案。试试这个,然后通过你的api调用TyreSerializer。在/api/tyres/'Tyre'对象上有一个错误AttributeError没有属性“Tyre”
我刚刚更新了答案。请试试这个。
[
{
"id": 1,
"group": "VH200",
"brand": "Aventus",
"tyres": [
{
"id": 1,
"group": 1,
"images": [...],
"type": "Л",
...etc
},
{
"id": 2,
"group": 1,
"images": [...],
"type": "Л",
...etc
}
]
},
...etc
]
[
{
"id": 1,
"group": "VH200",
"brand": "Aventus"
},
{
"id": 2,
"group": "VH201",
"brand": "Columbus"
}
...etc
]
class TyresGroupSerializer(serializers.ModelSerializer):
tyres = TyreSerializer(source='get_tyres', many=True)
def get_tyres(self, instance):
queryset = Tyre.objects.filter(group=instance)
return queryset
class Meta:
model = TyresGroup
fields = ['id', 'code', 'brand', 'tyres']
class TyresSerializer(serializers.ModelSerializer):
images = ImagesSerializer(many=True)
tyregroups = serializers.SerializerMethodField(read_only=True) # If you do not want to write data of Tyre object otherwise you can set it to False
def get_tyregroups(self, instance):
serializer_class = TyreGroupSerializer(instance.group, many=True)
serialized_data = serializer_class.data
return serialized_data
class Meta:
model = Tyres
fields = ['id', 'group', 'images', 'type', 'tyregroups'] # add all other fields which you want to in json
class TyresGroupSerializer(serializers.ModelSerializer):
class Meta:
model = TyresGroup
fields = '__all__'