1

我有一个这样的模型:

from django.db import models
from django_countries.fields import CountryField

class Location(models.Model):
    company = models.CharField(max_length=64)
    country = CountryField()

    def __unicode__(self):
        return self.company

现在我正在使用 TastyPie 作为 API。我得到了一个像这样的非常简单的模型(尽管我之前已经使用过滤器和字段对其进行了编辑但没有成功):

class LocationResource(ModelResource):
    class Meta:
        queryset = Location.objects.all()
        resource_name = 'location'

它返回什么:

{"company": "testcompany", "country":"DE" "resource_uri": "/api/location/1/"}

不过,我需要的是国家名称,或者更好的是国家字段中的任何内容。

4

3 回答 3

2

您可以从 django_countries 数据字典中获取名称

from django_countries.data import COUNTRIES

country_name = COUNTRIES[country_code]
于 2020-03-06T13:33:38.457 回答
1

您可以添加脱水方法country到您的LocationResource

def dehydrate_country(self, bundle):
    return bundle.obj.country.name 

OR

如果您正在使用DRF实例化Country field,例如

 from django_countries.serializer_fields import CountryField

 country = CountryField(country_dict=True)

在你的serializer.

于 2016-03-18T10:35:57.003 回答
0

在 DRF 的情况下,对序列化程序进行一点调整就可以了

from django_countries.serializer_fields import CountryField
from django_countries.fields import CountryField as ModelCountryField


class CustomCountryMixin(CountryFieldMixin):
    """Custom mixin to serialize country with name instead of country code"""

    def to_representation(self, instance):
        data = super().to_representation(instance)
        for field in instance._meta.fields:
            if field.__class__ == ModelCountryField:
                if getattr(instance, field.name).name:
                    data[field.name] = getattr(instance, field.name).name
        return data



class StudentSerializer(CustomCountryMixin, serializers.ModelSerializer):

    class Meta:
        model = Student
        fields = ('mobile_number', 'study_destination', 'country_of_residence',
                  'university', 'study_level', 'course_start_date')

于 2020-09-23T19:42:48.337 回答