Получение 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")

Какие решения вы можете предложить?

Вернуться на верх