首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在django rest框架中获得外键的值而不是id

如何在django rest框架中获得外键的值而不是id
EN

Stack Overflow用户
提问于 2017-03-28 14:31:19
回答 2查看 3.6K关注 0票数 3

对不起,我英语不好,希望你能理解我的意思。

把即时通讯输出出来:

代码语言:javascript
复制
[
    {
        "MainCatName": 1,
        "Name": "harry potter",
        "Image": "/media/101029496--sites-default-files-images-101029496-3176173-1748009911-hp.jp-1_MoxqrLp.jpg"
    },
    {
        "MainCatName": 2,
        "Name": "Princes Girl",
        "Image": "/media/character_princess_rapunzel_8320d57a.jpeg"
    },
    {
        "MainCatName": 3,
        "Name": "sex in the city",
        "Image": "/media/250px-SATC_Title.jpg"
    },
    {
        "MainCatName": 4,
        "Name": "who is dragon",
        "Image": "/media/Reggio_calabria_museo_nazionale_mosaico_da_kaulon.jpg"
    },
    {
        "MainCatName": 2,
        "Name": "drama queen",
        "Image": "/media/15241421_170761763390015_7913498865987146084_n.jpg"
    }
]

我想要的:

我想返回表中的FORIGN (MainCatName)值,而不是CategoryName = models.CharField(max_length=50)在models.py中的ID.ie值

喜欢

代码语言:javascript
复制
[
    {
        "MainCatName": Story Books,
        "Name": "harry potter",
        "Image": "/media/101029496--sites-default-files-images-101029496-3176173-1748009911-hp.jp-1_MoxqrLp.jpg"
    },
    {
        "MainCatName": Darama,
        "Name": "Princes Girl",
        "Image": "/media/character_princess_rapunzel_8320d57a.jpeg"
    },
    {
        "MainCatName": Roamance,
        "Name": "sex in the city",
        "Image": "/media/250px-SATC_Title.jpg"
    },
    {
        "MainCatName": sex,
        "Name": "who is dragon",
        "Image": "/media/Reggio_calabria_museo_nazionale_mosaico_da_kaulon.jpg"
    },
    {
        "MainCatName": darama,
        "Name": "drama queen",
        "Image": "/media/15241421_170761763390015_7913498865987146084_n.jpg"
    }
]

这是我的代码:

veiws.py :

代码语言:javascript
复制
class GETCATVeiw(APIView):
    def get(self, request):
        data = Products.objects.only('MainCatName','Name','Image')
        serializer = GETCAT(data, many=True)
        return Response(serializer.data)

    def post(self):
        pass

models.py :

代码语言:javascript
复制
class Category(models.Model):
    CategoryName = models.CharField(max_length=50)
    class Meta:
            verbose_name_plural = 'Categories'

        def __str__(self):
        return self.CategoryName

class Products(models.Model):
    MainCatName = models.ForeignKey(Category, on_delete=models.CASCADE)
    Name = models.CharField(max_length=50)
    Image = models.ImageField()
    Price = models.IntegerField()
    DiscriptionHeading = models.CharField(max_length=100)
    DiscriptionParagraph = models.TextField(max_length=1000)

    class Meta:
            verbose_name_plural = 'Products'

        def __str__(self):
            return str(self.MainCatName)+' - '+self.Name+' - '+str(self.Price)+' $'

serializers.py :

代码语言:javascript
复制
class GETCAT(serializers.ModelSerializer):
    class Meta:
        model = Products
        fields = ('MainCatName', 'Name', 'Image')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-28 15:03:46

您可以使用SlugRelatedField

代码语言:javascript
复制
class GETCAT(serializers.ModelSerializer):
    MainCatName = serializers.SlugRelatedField(read_only=True, slug_field='CategoryName')
    class Meta:
        model = Products
        fields = ('MainCatName', 'Name', 'Image')

编辑:我不确定它是否适用于Products.objects.only('MainCatName','Name','Image'),因为您将跨越数据库关系。此外,您可能希望使用select_related来避免获取N+1 DB查询。

票数 6
EN

Stack Overflow用户

发布于 2017-03-28 15:20:54

泛型Django方法是在模型上定义自然键,在本例中是Category

  1. 按自然键序列化:将natural_key(self)方法添加到您的Category类中,在该类中返回类别的CategoryName。它必须是独一无二的! def natural_key(self):返回self.CategoryName
  2. 按自然键反序列化:要为类别模型定义默认管理器: objects = CategoryManager() 并在您的get_by_natural_key(self, name)类中定义CategoryManager(models.Manager)方法,该方法返回类别: 类CategoryManager(models.Manager):def get_by_natural_key(self,name):返回self.get(CategoryName=name)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43072340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档