【发布时间】:2022-06-25 20:31:23
【问题描述】:
我的模型 Dish 与模型 DishesType 具有 ForeignKey 关系:
class DishesType(models.Model):
# some fields ...
class Dish(models.Model):
# some fields ...
type_of_food = models.ForeignKey(DishesType, on_delete=models.CASCADE)
当我执行 retrieve 方法来获取单个 DishesType 模型实例时,我还想显示与以下相关的所有 Dish 模型实例的 url当前 DishesType 实例。
例如 DishesType 实例 Pizza 有 3 个相关的 Dish 实例:Meet Pizza、Hawaiian Pizza 和 Cheese Pizza。因此,当我检索页面site.com/dishes-types/pizza 时,我想要进行下一个序列化:
{
"name": "Pizza",
"dishes_type_url": "site.com/dishes-types/pizza/",
...
"dishes": {
"Meet Pizza": "site.com/dishes/meet-pizza/",
"Hawaiian Pizza": "site.com/dishes/hawaiian-pizza/",
"Cheese Pizza": "locasite.comlhost/dishes/cheese-pizza/"
}
},
我已经尝试通过下一种方法来做到这一点(替换元类):
class DishSerializer(ValidateNameMixin, HyperlinkedModelSerializer):
"""The serializer of the 'Dish' model"""
dish_url = HyperlinkedIdentityField(view_name="dish-detail", lookup_field="name")
class SingleDishesTypeSerializer(ValidateNameMixin, HyperlinkedModelSerializer):
"""The serializer of the 'DishesType' model"""
dishes_type_url = HyperlinkedIdentityField(view_name="dishes_type-detail", lookup_field="name")
dishes = SerializerMethodField(source="get_dishes")
@staticmethod
def get_dishes(dish_type):
all_current_dishes_type_dishes = Dish.objects.filter(type_of_food=dish_type)
# Here I'm getting the error displayed below
serializer = DishSerializer(all_current_dishes_type_dishes, many=True)
...
return some_data
但我当然会遇到下一个错误:
'HyperlinkedIdentityField' requires the request in the serializer context. Add 'context={'request': request}' when instantiating the serializer.
显然我无法从序列化程序访问request 对象,那么我应该怎么做才能完成我的想法?
【问题讨论】:
-
你在哪里使用
request?您没有显示所有代码。 -
@DavidLu 你还需要什么代码?
request传递给视图的对象,如果我不直接从视图传递它,则无法在序列化程序的方法中访问它,这是解决我的问题的方法之一,但我认为这种方法不是最好的。
标签: python django django-models django-rest-framework django-serializer