如何从Django中两个不同的表返回数据?

nd

我的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设置如下。我正在查

序列化器

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
滑稽的人

实际上,您不需要为此使用两个单独的视图,因为您可以轻松地从一个序列化器类序列化关系。看一下这个有用的答案:如何使用Django Rest Framework包括相关的模型字段?

对于您的情况,您可以这样写:

class StatusActivitySerializer(serializers.ModelSerializer):
    device_name = serializers.CharField(source='device_id.device_name')

    class Meta:
        model = StatusActivity
        fields = ('changed_to', 'modified_at', 'device_id', 'device_name')

值得注意的一点:

  1. 对于ForeignKey字段使用devicename而不是device_id;
  2. related_name arg应该具有用于​​反向访问的名称。保持有意义,例如status_activities是一个不错的选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从两个不同的表中返回列值?

返回包含在 django rest 框架中的两个不同模型中的数据

如何对来自两个不同表的两列中的数据进行排序

如何比较两个不同表中的两列

从两个不同的表中获取通用数据

查询以从两个不同的表中获取数据

从numpy表中获取两个不同的学生数据

使用 PDO 在两个不同的表中显示数据

在Django中查询相同模型时如何返回两个不同的错误消息

从两个不同的表中搜索数据,这两个表在不同的数据库中

如何从两个不同的表中获取两个不同列的计数

如何使两个不同表中的两个不同列保持同步?

如何从两个不同的sql表在datagridview中添加数据?

如何连接来自mysql中两个不同表的数据(LEFT JOIN)?

如何关联位于不同数据库(SQL Server)中的两个表?

如何从两个不同的表中获取数据的层次结构?

如何将动态表单数据存储在两个不同的表中?

如何从orientDB的同一张表中检索两个不同边的数据?

两个人如何从2个不同的表中获取数据C#

如何使用 Eloquent 从两个不同的表中检索数据

如何使用 PHP 和 MYSQL 将数据插入到两个不同的表中

两个查询返回不同的数据

如何根据两个参数从两个表中选择不同的数据?

两个不同数据库中两个表之间的多对多关系

如何使用PostgreSQL从Django中的两个表中检索数据

如何从两个不同的表中获取记录

在 MySQL 中,如何从两个不同的表中选择 *?

如何显示两个不同表中的日期?

如何从两个不同表的 JSON 数组中查询?