繁体   English   中英

我如何在 Django Rest 中显示外键的值

[英]How do I the value for a foreign key to show up in Django Rest

我希望我的 output json 显示外键指向的记录的值而不是键。

例如,我希望它显示出来:

[
    {
        "id": 1,
        "brand": "ATL Motors",
        "package": "Full Page",
        "newspaper": "Gleaner",
        "cost": 22000,
        "objective": "Brand Awareness",
        "ad_date": "2016-10-01",
        "created_on": "2016-10-07T20:21:52Z"
    }

]

而不是这个:

[
    {
        "id": 1,
        "brand": 2,
        "package": "Full Page",
        "newspaper": 1,
        "cost": 22000,
        "objective": "Brand Awareness",
        "ad_date": "2016-10-01",
        "created_on": "2016-10-07T20:21:52Z"
    }
]

这是我的 models.py 文件:

from django.db import models
from django.utils import timezone


class Brand(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()
    website = models.URLField()
    created_on = models.DateTimeField(default=timezone.now())

    def __str__(self):
        return self.name


class Newspaper(models.Model):
    name = models.CharField(max_length=200)
    created_on = models.DateTimeField(default=timezone.now())

    def __str__(self):
        return self.name


class PurchasedAd(models.Model):
    brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
    package = models.CharField(max_length=350)
    newspaper = models.ForeignKey(Newspaper, on_delete=models.CASCADE)
    cost = models.IntegerField()
    objective = models.TextField()
    ad_date = models.DateField()
    created_on = models.DateTimeField(default=timezone.now())

    def __str__(self):
        string = "{} - {}".format(self.brand, self.objective)
        return string

这是我的 serializer.py 文件:

from rest_framework import serializers
from . import models


class BrandSerializer(serializers.ModelSerializer):
    class Meta:
        fields = (
            'id',
            'name',
            'description',
            'website',
            'created_on',
        )
        model = models.Brand


class PurchasedAdSerializer(serializers.ModelSerializer):
    class Meta:
        fields = (
            'id',
            'brand',
            'package',
            'newspaper',
            'cost',
            'objective',
            'ad_date',
            'created_on',
        )
        model = models.PurchasedAd

这是我的 views.py 文件:

from rest_framework import generics
from . import models
from . import serializers


class ListBrand(generics.ListAPIView):
    queryset = models.Brand.objects.all()
    serializer_class = serializers.BrandSerializer


class ListAds(generics.ListAPIView):
    queryset = models.PurchasedAd.objects.all()
    serializer_class = serializers.PurchasedAdSerializer

请帮忙!!

您可以使用StringRelatedField

StringRelatedField可以使用其unicode方法来表示关系的目标。

class PurchasedAdSerializer(serializers.ModelSerializer):
    newspaper = serializers.StringRelatedField()

    class Meta:
        fields = (
            'id',
            'brand',
            'package',
            'newspaper',
            'cost',
            'objective',
            'ad_date',
            'created_on',
        )
        model = models.PurchasedAd
**StringRelatedField may be used to represent the target of the relationship using its unicode method.**


class BrandSerializer(serializers.ModelSerializer):
    PurchasedAd=serializers.StringRelatedField(many=True)
    Newspaper=serializers.StringRelatedField(many=True)
    class Meta:
        model=Brand
        fields = "__all__"

暂无
暂无

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

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