Как отобразить название города вместо id?

У меня есть 2 модели:

class City(models.Model):
    name = models.CharField(max_length=50, default='')

    def __str__(self):
        return self.name

class Street(models.Model):
    name = models.CharField(max_length=50)
    city = models.ForeignKey(City, on_delete=models.CASCADE)

    def __str__(self):
        return f"{self.city}: {self.name}"

И я хочу отобразить все улицы города по url:

path('city/<int:pk>/street/', views.CityDetail.as_view())

Следующий вид:

class CityDetail(APIView):

    def get(self,request, pk, format=None):
        city = City.objects.get(id = pk)
        # try except for DoesNotExist
        streets = Street.objects.filter(city=city)
        serializer = StreetSerializer(streets, many=True)
        # Name instead of id!
        return Response(serializer.data)

Как отобразить имя cit вместо id?

[{"id":1,"name":"Почтовая","city":1},{"id":2,"name":"Ленина","city":1},{"id":3,"name":"Быстрецкая","city":1}]

StringRelatedField хорошо работает в моей ситуации!

Измените код serializers.py на

class CitySerializer(serializers.ModelSerializer):
    class Meta:
        model = City
        fields = ['id', 'name']

class StreetSerializer(serializers.ModelSerializer):
    city = CitySerializer(read_only=True, many=False)
    class Meta:
        model =  Street
        fields = ['id', 'name', 'city']
Вернуться на верх