Python Django:';int';当视图集中存在不同的序列化程序时,对象不可iterable
我在此端点上发出Python Django:';int';当视图集中存在不同的序列化程序时,对象不可iterable,python,django,serialization,nested,Python,Django,Serialization,Nested,我在此端点上发出GET请求时遇到问题:/api/emptance/{hotel\u id}/。它应该返回特定酒店ID的空缺信息 在我的模式中,空缺模型包含以下属性: 酒店id作为外键 房间id作为外键 空缺为整数 作为整数出租 为了获得相关信息,我打算通过空缺视图集调用HotelDetailsSerializer,认为这可能比筛选空缺表更容易 根据URL中提供的hotel_id值,因为它将自动提供与特定酒店id相关的空缺收集 在http://localhost:8000/api/hotels
GET
请求时遇到问题:/api/emptance/{hotel\u id}/
。它应该返回特定酒店ID的空缺信息
在我的模式中,空缺模型包含以下属性:
- 酒店id作为外键
- 房间id作为外键
- 空缺为整数
- 作为整数出租
空缺视图集
调用HotelDetailsSerializer
,认为这可能比筛选空缺表更容易
根据URL中提供的hotel_id
值,因为它将自动提供与特定酒店id相关的空缺收集
在http://localhost:8000/api/hotels/1
(如下所示)提供了我需要的信息。但是,当我试图通过带有此端点的空缺视图集
获得此响应时
http://localhost:8000/api/vacancies/1
我发现以下错误:
TypeError位于/api/expansions/1/
“int”对象不可编辑
那么,我试图做的一开始是可能的,还是有更好的方法或最佳实践可以在这里应用
谢谢你的回复
这是我的空缺序列化程序
文件:
从rest\u框架导入序列化程序
from..models.model_空缺导入空缺
从.serializers\u文件室导入*
从.serializers\u酒店导入*
类VacancyIndexSerializer(serializers.ModelSerializer):
"""
列出数据库中所有模型的序列化程序
"""
房间id=RoomIndexSerializer(允许null=True)
类元:
型号=空缺
字段=[
“房间id”,
“酒店id”,
“空缺”,
“出租”
]
类VacancyDetailsSerializer(serializers.ModelSerializer):
"""
显示数据库中空缺模型详细信息的序列化程序
"""
房间id=RoomDetailsSerializer()
类元:
型号=空缺
字段=[
“房间id”,
“空缺”,
“出租”
]
类VacancyCreateSerializer(serializers.ModelSerializer):
"""
用于在DB中创建空缺模型的序列化程序
"""
类元:
型号=空缺
字段=[
“房间id”,
“酒店id”,
“空缺”,
“出租”
]
def创建(自我验证的_数据):
空缺=空缺.objects.create(**已验证的_数据)
退货
类VacancyUpdateSerializer(serializers.ModelSerializer):
"""
序列化程序声明要提供以更新空缺实例的字段。
"""
类元:
型号=空缺
字段=[
“房间id”,
“酒店id”,
“空缺”,
“出租”
]
它的Viewset
中,我使用另一个Serializer
作为retrieve
类:
从rest\u框架导入视图集
from..models.model_空缺导入空缺
从..serializers.serializers\u导入*
来自..serializers.serializers\u酒店导入*
类VacancyViewSet(ViewSet.ModelViewSet):
"""
根据请求类型(GET、PUT等)调用各种序列化程序
"""
queryset=空缺.objects.order\u by('id'))
#将序列化程序映射到操作中
序列化程序\u类={
“列表”:VacancyIndexSerializer,
“检索”:HotelDetailsSerializer,
“创建”:VacancyCreateSerializer,
“更新”:VacancyUpdateSerializer,
“部分更新”:VacancyUpdateSerializer
}
#您的默认序列化程序
默认\u序列化程序\u类=VacancyIndexSerializer
def get_序列化程序_类(自身):
"""
方法来检测请求类型(GET、PUT等)并选择相应的序列化程序。
"""
返回self.serializer\u classes.get(self.action,self.default\u serializer\u class)
这是我的另一个序列化程序
:
从rest\u框架导入序列化程序
来自..models.model_酒店进口酒店
从.serializers\u导入*
类HotelIndexSerializer(serializers.ModelSerializer):
"""
列出DB中所有酒店模型的序列化程序
"""
类元:
模型=酒店
字段=[
“id”,
“姓名”,
]
类HotelDetailsSerializer(serializers.ModelSerializer):
"""
显示DB中酒店模型详细信息的序列化程序
"""
空缺=真空排气干燥器(多个=真)
类元:
模型=酒店
字段=[
“空缺”
]
类HotelCreateSerializer(serializers.ModelSerializer):
"""
用于在DB中创建酒店模型的序列化程序
"""
类元:
模型=酒店
字段=[
“姓名”,
]
类HotelUpdateSerializer(serializers.ModelSerializer):
"""
序列化程序声明要提供的字段以更新Hotel实例。
"""
类元:
模型=酒店
字段=[
“姓名”,
]
当我请求GET
onhttp://localhost:8000/api/hotels/1
我得到:
{
“空缺”:[
{
“房间id”:{
“房间”:“第一”,
“名称”:“第一个”,
“说明”:“说明”
},
“空缺”:10,
“租用”:0
},
{
“房间id”:{
“房间”:“第二间”,
“名称”:“第二个”,
“说明”:“说明”
},
“空缺”:10,
“租用”:0
}
]
}
当为空缺模型配置酒店时,您不能强制ModelViewset
返回酒店以执行retretrieve
操作<