Django Serializer не показывает связанные поля - PullRequest
0 голосов
/ 05 декабря 2018

Я не могу заставить поле State появляться в результате.Не знаю почему.

Моя модель:

class City(models.Model):
   city_id = models.AutoField(primary_key=True)
   city = models.CharField(max_length=100, blank=True, null=True)
   state = models.ForeignKey('State', models.DO_NOTHING, blank=True, null=True)

   class Meta:
       managed = False
       db_table = 'city'

   def __str__(self):
       return self.city

class State(models.Model):
   state_id = models.AutoField(primary_key=True)
   state = models.CharField(max_length = 10, blank=True, null=True)

   class Meta:
       managed = False
       db_table = 'state'

Мой сериализатор:

class StateSerializer(serializers.ModelSerializer):
    class Meta:
        model = State
        fields = ('state_id', 'state')


class CitySerializer(serializers.ModelSerializer):
     state = StateSerializer(source='state_set', many=False, read_only = True)
   class Meta:
       model = City
       fields = ('city_id', 'city', 'state')

Мои просмотры:

class CityList(APIView):
    # Return all the cities
   def get(self, request):
       cities = City.objects.all()
       serializer = CitySerializer(cities, many=True)
       return Response(serializer.data)

   def post(self):
       pass

Мой результат JSON:

[
{
    "city_id": 242,
    "city": null
},
{
    "city_id": 754,
    "city": "CARY"
},
{
    "city_id": 2085,
    "city": "FROM YOUR"
},...

Как получить, чтобы поле состояния отображалось в результате JSON?Может кто-нибудь помочь?У меня есть несколько таких столов.

1 Ответ

0 голосов
/ 05 декабря 2018

У вас плохое отношение в CitySerializer .

Город не имеет state_set отношения ... оно имеет только одно состояние.

CitySerializer должен выглядеть следующим образом:

class CitySerializer(serializers.ModelSerializer):
    # Removed source.. by default it's like the field name
    # I removed also many=False because it's default

    state = StateSerializer(read_only=True)
    class Meta:
        model = City
        fields = ('city_id', 'city', 'state')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...