Как отобразить название города вместо 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']