【发布时间】:2020-03-25 19:51:11
【问题描述】:
我的 models.py 中有两个模型。我需要返回一个 json 响应,其中包含来自两个表的数据。 我的视图和序列化程序应该是什么样子?
class Device(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
device_name = models.CharField(max_length=200, null=True, blank=True )
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.device_name)
class StatusActivity(models.Model):
OFFLINE = 1
ONLINE = 2
STATUS = (
(OFFLINE, ('Offline')),
(ONLINE, ('Online')),
)
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
device_id = models.ForeignKey(Device, related_name='StatusActivity', on_delete=models.CASCADE)
changed_to = models.PositiveSmallIntegerField(choices=STATUS)
modified_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.device_id)
预期响应:
{
"device_id":"",
"device_name":"",
"changed_to":"",
"modified_at":"",
}
更新: 我将views.py 和serializer.py 设置如下。我正在检查
Serializer.py
class DeviceSerializer(serializers.ModelSerializer):
class Meta:
model = Device
fields = '__all__'
class StatusActivitySerializer(serializers.ModelSerializer):
class Meta:
model = StatusActivity
fields = '__all__'
class ListSerializer(serializers.Serializer):
# devices = DeviceSerializer(many=True)
# activities = StatusActivitySerializer(many=True)
class Meta:
model = [Device, StatusActivity]
fields = ['device_id', 'device_name', 'changed_to', 'modified_at']
Views.py
class DeviceListView(generics.ListAPIView):
queryset = Device.objects.all()
serializer_class = ListSerializer
class StatusActivityListView(generics.ListAPIView):
queryset = StatusActivity.objects.all()
serializer_class = StatusActivitySerializer
【问题讨论】:
-
你尝试过什么?表现出一些努力
-
为什么你有 2 个视图?如果你想要一个响应,你应该只有一个视图。
-
Okey,它应该是什么样子?我仍然无法检索像我上面的问题中描述的数据。你能指出我该怎么做吗? @dirkgroten
-
首先,您获取的是
Device还是StatusActivity(即在您的url 中传递了哪个pk/id)?为该模型创建序列化程序,然后通过指定source手动添加来自另一个模型的字段。
标签: django django-rest-framework