我正在創建一個api,其中顯示了組列表以及屬於該組的設備id。例如,如果有一個名爲車速表,加溼器設備和他們在家庭組落,然後我的API應該包括device_list未顯示
{
"id": 1,
"name": "Home"
"device_list": [
{
"id": "b45c56ioxa1"
},
{
"id": "h4oc2d5ofa9"
}
]
},
,但我的代碼不會在API生產device_list。它只顯示名稱和編號
device_list是在特定組中的所有設備ID的列表。
這裏是我的代碼
class DeviceIdSerializer(serializers.ModelSerializer):
id = serializers.UUIDField(source='token', format='hex', read_only=True)
class Meta:
model = Device
fields = ('id')
class DeviceGroupSerializer(serializers.ModelSerializer):
name = serializers.StringRelatedField()
device_list = DeviceIdSerializer(read_only=False, many=True, required=False, source="groups")
class Meta:
model = DeviceGroup
fields = ('id', 'name', 'device_list')
class DevicesGroupsAPIView(APIView):
permission_classes = (permissions.IsAuthenticated,)
def get(self, request, format=None):
"""
Returns a list of groups
"""
reply = {}
try:
groups = DeviceGroup.objects.all()
print ('reply', groups)
reply['data'] = DeviceGroupSerializer(groups, many=True).data
except:
reply['data'] = []
return Response(reply, status.HTTP_200_OK)
class BaseDevice(PolymorphicModel):
# User's own identifier of the product
name = models.CharField(max_length=250, blank=False, null=False)
# Any device should have a owner, right from the creation
owner = models.ForeignKey(User, blank=False, null=False)
token = models.UUIDField(default=uuid.uuid4, unique=True, editable=False)
group = models.ForeignKey('DeviceGroup', related_name="groups", null=True, blank=True)
class Device(BaseDevice):
description = models.TextField(blank=True, null=True)
class DeviceGroup(models.Model):
name = models.CharField(max_length=250, blank=False, null=False)
device_list沒有映射到任何模型數據...也許它映射到組 –
我有將它映射爲組= GroupId = DeviceIdSerializer(),但我現在得到空數據對象。 – Serenity
我的意思是把源設置爲'device_list = DeviceIdSerializer(read_only = False,many = True,required = False,source ='groups')',以便串行器知道從哪裏獲取數據。源需要是對象上的字段,屬性或可調用對象,因此您可能需要嘗試不同的操作,例如'groups.all' –