繁体   English   中英

如何在 Django rest_framework 中获取外键表值而不是 id?

[英]How can i get foreign key table value istead of id in Django rest_framework?

最近我开始使用 django 框架,我被困在这种情况下尝试阅读文档,但我缺乏经验,我不太明白有什么方法可以得到我们想要的响应,保持 django 默认检查,尽可能多的验证。 我尝试使用def to_representation ,但它仍然让我在调试时响应为 null。

用例:我在下面提到了 model 我希望外键值作为文本存储在产品表中的表 status_lookup.name 中


class product_serializer(serializers.ModelSerializer):
    status = status_lookup_serializer(read_only=True,many=False)
    
    class Meta:
        model = product
        fields = ('id','name','status_id','status')

model.py

class status_lookup(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=30)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(blank=True)
    activation_date = models.DateTimeField(auto_now_add=True)
    deactivation_date = models.DateTimeField(blank=True,default=None)


    def __str__(self):
       return self.name

class product(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=30)
    img_url = models.CharField(max_length=255,blank=True)
    status_id = models.ForeignKey(status_lookup, related_name='status', on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(blank=True)
    activation_date = models.DateTimeField(auto_now_add=True)
    deactivation_date = models.DateTimeField(blank=True,default=None)

    def __str__(self):
       return self.name

o/p 在此处输入图像描述

我想

[
 {
  "id":1,
  "name":"xxx",
  "status":pending
 }
]

检查这是否对您有帮助。 这是 Django-rest-framework 的文档链接

https://www.django-rest-framework.org/api-guide/serializers/

我能够做到这一点我不知道这是否是最佳方式,但会保持这个问题开放,直到我找到一个或某人的答案。

class statusField(serializers.RelatedField):

    def to_representation(self, value):
        return {
            'name':value.name
        }

class product_serializer(serializers.ModelSerializer):
    status_id = statusField(many=False,read_only=True)
                
    class Meta:
        model = product
        fields = ('id','name','status_id')

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM