Получение URI источника для иностранного объекта в django в сериализаторе?
Предположим, что у нас есть следующие модели:
class Person(models.Model):
name = models.CharField(max_length=10, blank=True, null=True)
class Food(models.Model):
person = models.ForeignKey(Person, default=None, on_delete=models.CASCADE)
name = models.CharField(max_length=10, blank=True, null=True)
У меня есть эти модели в ModelViewSets и зарегистрировал их как URL в Django Rest Framework. И они успешно доступны как URI источника, но я хочу добавить поле для Food, которое может возвращать URI источника Person. Я могу закодировать его следующим образом, но мне нужно что-то получше:
class Food(models.Model):
person = models.ForeignKey(Person, default=None, on_delete=models.CASCADE)
name = models.CharField(max_length=10, blank=True, null=True)
def get_person_uri(self):
return f"http://127.0.0.1:8000/persons/{self.person.id}/"
Сериализатор выглядит следующим образом:
class FoodSerializer(serializers.Model):
class Meta:
model = Food
fields = ["person", "name", "get_person_uri"]
Здесь get_person_uri
должен вести меня непосредственно к URI родительского лица
Более того, вот мой взгляд:
class FoodViewSet(ModelViewSet):
serializer_class = FoodSerializer
permission_classes = [IsAuthenticated]
model = serializer_class.Meta.model
queryset = model.objects.all()
Вот как он регистрируется в urls.py:
router.register(r"foods", FoodViewSet, basename="foods")
Какие решения вы можете предложить?