【问题标题】:How can i get foreign key table value istead of id in Django rest_framework?如何在 Django REST 框架中获取外键表值而不是 id?
【发布时间】:2023-03-20 12:25:01
【问题描述】:

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

用例: 我在下面提到了模型我希望外键值作为文本存储在产品表中的表 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')

模型.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
 }
]

【问题讨论】:

    标签: python-3.x django django-models django-rest-framework django-views


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      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')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-28
        • 1970-01-01
        • 1970-01-01
        • 2021-03-05
        • 2017-08-19
        • 1970-01-01
        • 2015-12-07
        • 2018-10-09
        相关资源
        最近更新 更多