Почему бы вам не переопределить функцию to_representation ().Примерно так:
class MenuSerializer(serializers.ModelSerializer):
def to_representation(self, obj):
restaurants = RestaurantSerializer(instance=obj,
context=self.context).data
data = []
for restaurant in restaurants:
data.append(
{
"restaurant": {
"item": obj.item,
"category": obj.category,
"price": obj.price,
"name": restaurant.name,
}
}
)
return data
Не глядя на ваши модели или почему вы хотите ресторан там, я добавил цикл for, чтобы показать вам, что вы можете в значительной степени получить доступ к любым данным в вашем to_representation () и поместите его в любой формат, который вы хотите.Я использую это, когда пытаюсь визуализировать мои объекты JSON в XML особым образом.Надеюсь это поможет.
Также ознакомьтесь с документацией: https://www.django -rest-framework.org / api-guide / serializers / # overriding-serialization-and-deserialization-поведения
Другое решение, которое вы могли бы рассмотреть, это добавить внешний ключ вашей модели меню обратно в ресторан, тогда вы можете определить свой сериализатор следующим образом:
class RestaurantSerializer(serializers.ModelSerializer):
menu = MenuViewSerializer(read_only=True, many=True)
class Meta:
model = Restaurant
fields = [
"id",
"name",
"menu",
]
extra_kwargs = {
"menu": {"read_only": True},
}