【问题标题】:How to display multiple photos via API如何通过 API 显示多张照片
【发布时间】:2022-08-13 20:34:17
【问题描述】:

模型.py

class UserRoom(models.Model):
    objects = None
    categoty = [
        (\'President Lux\', \'President Lux\'),
        (\'Lux\', \'Lux\'),
        (\'Double\', \'Double\'),
        (\'Standard\', \'Standard\'),
    ]
    name = models.CharField(max_length=150, choices=categoty, verbose_name=\'Категория\')
    room_num = models.CharField(max_length=150)
    about = models.TextField(verbose_name=\'Подробности\')
    price = models.IntegerField(verbose_name=\'Цена\')
    img360 = models.FileField(verbose_name=\'Фотография в 360\')

    class Meta:
        verbose_name = \'Номер (About)\'
        verbose_name_plural = \'Номера (About)\'


class UserImg(models.Model):
    name = models.ForeignKey(UserRoom, on_delete=models.CASCADE, verbose_name=\'img2\')
    img = models.FileField(upload_to=\'User img\', verbose_name=\'Фотография\')

如何在 serializers.py 中写入,以便显示数据库中的所有数据?

如何在 serializers.py 中写入,以便显示数据库中的所有数据? 现在,当我连接 serializers.py 时,它仅显示第一个模型或第二个模型的图片和附加模型的 ID


class UserRoomSer(ModelSerializer):
    class Meta:
        model = UserRoom
        fields = \'__all__\'

views.py

class Test(ListAPIView):
    permission_classes = [AllowAny]
    queryset = UserRoom.objects.all()
    serializer_class = UserRoomSer
  • 你以什么方式连接序列化器?向我们展示您的观点
  • UserImg 创建序列化程序并将UserRoomSer 分配给name 序列化程序的name 属性
  • @AnkitTiwari 你能展示一个示例代码吗

标签: python django django-rest-framework django-serializer


【解决方案1】:
class UserImgSer(ModelSerializer):
    class Meta:
        model = UserImg
        fields = '__all__'


class UserRoomSer(ModelSerializer):
    images = UserImgSer(source='userimg_set', many=True)

    class Meta:
        model = UserRoom
        fields = [
            'name', 'room_num', 'about', 'price',
            'img360', 'images',
        ]

只需像上面那样创建序列化程序,它就会像这样创建 json

{
    "images": [
        {
            "name": "",
            "img": ""
        },
        {
            "name": "",
            "img": ""
        }
    ],
    "name": "",
    "room_num": "",
    "about": "",
    "price": "",
    "img360": ""
}

更新 :
Django 休息Viewsets 更新你的视图.py像这样的文件

from rest_framework import viewsets

class UserRoomViewSet(viewsets.ModelViewSet):
    permission_classes = [AllowAny]
    queryset = UserRoom.objects.all()
    serializer_class = UserRoomSer

Django 休息DefaultRouter 在你的里面添加这个网址.py文件

from rest_framework import routers

router = routers.DefaultRouter()
router.register(r'room', UserRoomViewSet)
urlpatterns = [...all your urls]
urlpatterns += router.urls

如果您转到room,它将显示UserRoom 的列表,如果您导航到room/<pk>/,您将能够看到它的详细信息

【讨论】:

  • 是的,它有效,但一次只显示一张照片,我给了 url 地址 room/1 但随后它通过照片 ID 而不是房间 ID 进行跟踪
  • { "name":"", "room_num":"", "about":"", "price":"", "img360":"" }, "img":"" "img":"" "img":"" }我需要这样
  • 你好@ЗуфарТангрибергенов 检查我已经更新了我的答案。我保留了UserImgSer,因为如果您只想序列化UserImg 模型,它将很有用
  • 你是怎么做views.py的。我总是出错
  • 您好@ЗуфарТангрибергенов 提供与此相关的意见
猜你喜欢
  • 2014-05-25
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多