如何在 Django-rest-Framework 中获取相关对象的完整列表

用户190549

我正在尝试在 django-rest-framework 中首次实现嵌套序列化程序我的要求是我需要以下形式的响应数据:-

{
id: 0,
title: "Fresh",
data: [
    [{
            image: ".../assets/images/banana.jpeg",
            name: "Fruits",
            image_scaling: 2,
            API: "http://database_api"
        },
        {
            image: "../assets/images/banana.jpeg",
            name: "Vegetables",
            image_scaling: 2,
            API: "http://database_api"
        },
        {
            image: "../assets/images/banana.jpeg",
            name: "Exotic Vegetables",
            image_scaling: 2,
            API: "http://database_api"
        }
    ]
]

}

我正在验证 get api 的令牌并列出 DB 中的对象。我目前对 views.py 的实现是:-

class home(APIView):

 def get(self,request,format=None):

    header_token = request.META.get('HTTP_AUTHORIZATION', None)
    if header_token is not None:

        token = header_token
        access_token=token.split(' ')[1]
        print(access_token)
    
    if(validate_token(access_token) == None):
        raise NotFound('user does exist')
        

    queryset=Fresh.objects.all().select_related('data')
    print(queryset)
    serializer = FreshSerializer(queryset,many=True)
  
    return Response(serializer.data)

Serializer.py 是:-

class DataSerializer(serializers.ModelSerializer):
   class Meta:
    model=data
    fields = ('name','image_scaling','image')

class FreshSerializer(serializers.ModelSerializer):
   data=DataSerializer(read_only=True, many=False)
   class Meta:
      model = Fresh
      fields = ('title','data')

models.py 是:-

class data(models.Model):
  name=models.CharField(max_length=9,null=True)
  image_scaling=models.IntegerField(default=0,null=True)
  image=models.URLField(max_length = 200)
def __str__(self):
    return str(self.name)

class Fresh(models.Model):
   title=models.CharField(max_length=9)
   data=models.ForeignKey(data,on_delete=models.CASCADE,default=None, null=True)
def __str__(self):
    return str(self.title)+" " +str(self.data)

我目前的输出是:-

[
{
    "title": "vegetable",
    "data": {
        "name": "vegetable",
        "image_scaling": 2,
        "image": "https......jpg"
    }
},
{
    "title": "exoticveg",
    "data": {
        "name": "exoticveg",
        "image_scaling": 2,
        "image": "https://.......jpg"
    }
} ]

我试图通过 listapiview 和 modelviewset 来做,但我无法获得所需的输出。我在堆栈溢出中看到了类似的查询,但似乎没有解决方案对我有用。我没有得到外键对象的列表,是我的模型做错了什么还是运行了错误的查询?我真的很坚持。我该怎么办。请帮忙!!!

阿布廷莫

我认为您以错误的方式设计了模型:

在你想要的 json 中,每个新鲜的都有很多数据,所以你的模型应该是这样的:

class data(models.Model):
  name=models.CharField(max_length=9, null=True)
  image_scaling=models.IntegerField(default=0, null=True)
  image=models.URLField(max_length=200)
  data=models.ForeignKey(
        Fresh, on_delete=models.CASCADE, related_name="fresh_data",
  )

def __str__(self):
    return str(self.name)

class Fresh(models.Model):
   title=models.CharField(max_length=9)

def __str__(self):
    return str(self.title)

你的序列化程序应该是这样的:

class DataSerializer(serializers.ModelSerializer):
   class Meta:
    model=data
    fields = ('name', 'image_scaling', 'image')

class FreshSerializer(serializers.ModelSerializer):
   data = serializer.SerializerMethodField(read_only=True)
   class Meta:
      model = Fresh
      fields = ('id', 'title', 'data')


   def get_data(self, obj):
    return DataSerializer(obj.fresh_data, many=True).data

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Django Rest Framework(DRF)中覆盖Response类?

如何在Django REST Framework中禁用身份验证

如何在Django Rest Framework中以403错误返回数据?

Django Rest Framework-在列表中获取完整的相关对象

如何在Django Rest Framework API中隐藏网址?

如何在django-rest-framework POST中包含ForeignKey

如何在Django Rest Framework中列出相关对象

如何在Django Rest Framework中哈希Django用户密码?

Django Rest Framework:如何在ModelViewSet中关闭/打开分页

在Django Rest Framework中,如何添加ManyToMany相关对象?

如何在Django Rest Framework中验证只读字段

如何在Django rest Framework中执行Delete操作?

如何在Django REST Framework中处理嵌套对象

如何在Python(Django Rest Framework模板)中修复UnicodeDecodeError?

如何在Django Rest Framework中的动作内进行分页

如何在Django Rest Framework中更改多对多相关对象的表示

如何仅返回Django REST Framework中的相关对象

如何在Django REST Framework中修复UnicodeDecodeError?

如何从Django Rest Framework中的相关模型中获取数据?

如何在Django Rest Framework中处理文件?

如何在Django REST Framework中实现简单的“喜欢”功能?

如何在Django Rest Framework中动态设置分页?

如何在Django Rest Framework中动态更新视图集

如何在Django Rest Framework中获得模型方法的价值?

如何在Django Rest Framework中序列化ChoiceFields?

如何在 Django Rest Framework 中显示嵌套对象的属性

如何在 Django REST Framework 中捕获 PermissionDenied 异常

如何在 Django Rest Framework 中添加后缀 url?

如何在 Django REST Framework 序列化程序中获取相关字段的相关字段?