【问题标题】:how to get the value in the Foreign key in django restframework如何在django rest框架中获取外键中的值
【发布时间】:2014-11-11 22:51:16
【问题描述】:

我是 django restframework 的新手
我有一个关于如何在 django restframework 中获取外键值的问题

我的代码如下,当我想使用 django restframework 来编写 json 时。

models.py:

class Movie(models.Model):
    link = models.URLField()
    title = models.CharField(max_length=255, null=True)

class MovieImage(models.Model):
    movieimage = models.ForeignKey(Movie,null=True,blank=True)            
    img_link = models.URLField(max_length=255, null=True)   
    img_describe = models.URLField(max_length=255, null=True)   
    img_rank = models.URLField(max_length=255, null=True)   

序列化器.py

class MovieSerializer(serializers.ModelSerializer):     
    images = serializers.RelatedField(many=True, read_only=True, source='movieimage_set')

    class Meta:
        model = Movie
        fields = ('link', 'title', 'images')

我会得到结果:

       {
            "link": "https://test.com/id=1", 
            "title": "TEST", 
            "images": [
                "MovieImage object"
            ]
        } 

我想知道如何在images类中显示变量,比如:

       {
            "link": "https://test.com/id=1", 
            "title": "TEST",
            "images"[img_describe: "img_describe value",
                      img_link: "img_link vlaue" ]
        }           

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    如果您只需要将images 设为只读,则可以使用嵌套序列化程序来实现。如果它必须是可写的,您可能会遇到一些问题,因为嵌套序列化程序在使用 DRF

    您必须为图像编写一个序列化程序,类似于:

    class MovieImageSerializer(serializers.ModelSerializer):
        img_link = serializers.URLField()
        img_describe = serializers.CharField()
    
        class Meta:
            model = MovieImage
            fields = ('img_link', 'img_describe', )
    

    并将其添加到您当前的序列化程序中作为字段的替换,类似于:

    class MovieSerializer(serializers.ModelSerializer):     
        images = MovieImageSerializer(many=True, read_only=True, source='movieimage_set')
    
        class Meta:
            model = Movie
            fields = ('link', 'title', 'images')
    

    这将为您提供嵌套对象的输出,类似于:

    {
        "link": "https://test.com/id=1", 
        "title": "TEST", 
        "images": [
            {
                "img_describe": "the value",
                "img_link": "a link"
            }
        ]
    }
    

    您可以在Django REST Framework documentation 中找到有关嵌套关系的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-20
      • 2017-08-19
      • 2015-12-07
      • 2018-10-09
      • 2019-02-28
      • 2017-11-02
      • 2016-10-04
      • 2019-07-24
      相关资源
      最近更新 更多