Django
我正在使用https://github.com/coderholic/django-cities,我想为我的序列化程序添加城市和国家。Django <object>不是JSON可序列化
这是我的模型:
from cities.models import Country, City
class Location(models.Model):
name = models.CharField(max_length=200, blank=True, null=True, default=None)
city = models.ForeignKey(City, blank=True, null=True, default=None, related_name='city_of_location')
geolocation = map_fields.GeoLocationField(max_length=100, blank=True, default='')
我的观点:
class LocationsView(generics.ListAPIView):
queryset = Location.objects.order_by('-id')
serializer_class = LocationsSerializer
serializers.py
class LocationsSerializer(serializers.ModelSerializer):
country = serializers.ReadOnlyField(source='city.country')
class Meta:
model = Location
fields = ['id', 'name', 'geolocation', 'city', 'country']
时,我想看看它是否工作我得到:
<Country: Austria> is not JSON serializable
您需要定义CountrySerializer
才能序列化嵌套关系。
class CountrySerializer(serializers.ModelSerializer):
class Meta:
model = Country
fields = '__all__'
class LocationsSerializer(serializers.ModelSerializer):
number_of_rooms = serializers.SerializerMethodField()
country = CountrySerializer(source='city.country')
class Meta:
model = Location
fields = ['id', 'name', 'geolocation', 'city', 'country']
或者,如果你只需要国家ID,您可以使用PrimaryKeyRelatedField
:
country = PrimaryKeyRelatedField(source='city.country')
我现在得到:断言错误在/位置/ (“创建没有'字段'属性或'排除'属性的ModelSerializer从3.3.0开始已被弃用,现在不允许添加显式fields ='__所有__'到CountrySerializer序列化程序。“,) –
@NitaAlexandru对不起,您需要在'CountrySerializer'中指定字段,或者如果您需要所有字段,请'jsut添加'fields ='__all__''。查看更新。 – neverwalkaloner
啊哈,让我看看它是否有效 –
你是如何 “看它是否工作”? –
是否需要GeoJSON序列化程序? https://docs.djangoproject.com/en/1.11/ref/contrib/gis/serializers/这将有助于看到你如何称它和你的requirements.txt –
@DanielRoseman我访问http://127.0.0.1 :8000/locations /这是我应该看到json的地方,一切正常,直到我添加了城市和国家的串行器 –