ImportError: cannot import name 'MealSerializer' from partially initialized module 'delivery_api.main.serializers'
ImportError: cannot import name 'MealSerializer' from partially initialized module 'delivery_api.main.serializers'
当我将此行 cart = CartSerializer()
插入我的序列化器以获取详细信息时,我收到错误 ImportError: cannot import name 'MealSerializer' from partially initialized module 'delivery_api.main.serializers' (most likely due to a circular import)
。这是什么原因,如何解决?
cart/serializers.py
class CartMealSerializer(serializers.ModelSerializer):
meal = MealSerializer()
class Meta:
model = CartMeal
fields = ['id', 'meal', 'qty', 'final_price']
class CartSerializer(serializers.ModelSerializer):
meals = CartMealSerializer(many=True)
owner = CustomerSerializer()
class Meta:
model = Cart
fields = '__all__'
main/serializers.py
class OrderSerializer(serializers.ModelSerializer):
cart = CartSerializer() *<--- This line causes an error*
class Meta:
model = Order
fields = ['first_name', 'last_name', 'cart', 'phone', 'address', 'status', 'created_at']
请帮我解决这个问题
您这里(可能)有两个试图相互导入的文件。这没有意义,因为您的 main.serializers
模块旨在导入位于 cart.serializers
模块中的 CartSerializer
,而 cart.serializer
模块旨在导入定义的 MealSerializer
在 main.serializers
.
两个序列化器相互导入也是没有意义的:这通常会导致无限递归,其中 Meal
的序列化器序列化其 Order
并且将序列化相关的 Meal
秒。如果你像那样序列化它,那意味着你有无限递归,因此会生成一个具有无限级联的文件,所以像 { 'cart': { 'meals': { 'meal': { 'cart': { 'meals': { 'meal': { … } } } } } } }
.
因此,您应该定义不使用其他序列化程序的序列化程序,并使用它来定义有限 次迭代。例如,通过在 cart.serializers
模块的顶部定义一个 SimpleMealSerializer
,它不会进行额外的子序列化,所以类似于:
# cart/serializers.py
# <strong>no</strong> import of the MealSerializer
class SimpleMealSerializer(serializers.ModelSerializer):
class Meta:
model = Meal
fields = ['title', 'description', 'price']
class CartMealSerializer(serializers.ModelSerializer):
meal = <strong>SimpleMealSerializer()</strong>
class Meta:
model = CartMeal
fields = ['id', 'meal', 'qty', 'final_price']
class CartSerializer(serializers.ModelSerializer):
meals = CartMealSerializer(many=True)
owner = CustomerSerializer()
class Meta:
model = Cart
fields = '__all__'
当我将此行 cart = CartSerializer()
插入我的序列化器以获取详细信息时,我收到错误 ImportError: cannot import name 'MealSerializer' from partially initialized module 'delivery_api.main.serializers' (most likely due to a circular import)
。这是什么原因,如何解决?
cart/serializers.py
class CartMealSerializer(serializers.ModelSerializer):
meal = MealSerializer()
class Meta:
model = CartMeal
fields = ['id', 'meal', 'qty', 'final_price']
class CartSerializer(serializers.ModelSerializer):
meals = CartMealSerializer(many=True)
owner = CustomerSerializer()
class Meta:
model = Cart
fields = '__all__'
main/serializers.py
class OrderSerializer(serializers.ModelSerializer):
cart = CartSerializer() *<--- This line causes an error*
class Meta:
model = Order
fields = ['first_name', 'last_name', 'cart', 'phone', 'address', 'status', 'created_at']
请帮我解决这个问题
您这里(可能)有两个试图相互导入的文件。这没有意义,因为您的 main.serializers
模块旨在导入位于 cart.serializers
模块中的 CartSerializer
,而 cart.serializer
模块旨在导入定义的 MealSerializer
在 main.serializers
.
两个序列化器相互导入也是没有意义的:这通常会导致无限递归,其中 Meal
的序列化器序列化其 Order
并且将序列化相关的 Meal
秒。如果你像那样序列化它,那意味着你有无限递归,因此会生成一个具有无限级联的文件,所以像 { 'cart': { 'meals': { 'meal': { 'cart': { 'meals': { 'meal': { … } } } } } } }
.
因此,您应该定义不使用其他序列化程序的序列化程序,并使用它来定义有限 次迭代。例如,通过在 cart.serializers
模块的顶部定义一个 SimpleMealSerializer
,它不会进行额外的子序列化,所以类似于:
# cart/serializers.py
# <strong>no</strong> import of the MealSerializer
class SimpleMealSerializer(serializers.ModelSerializer):
class Meta:
model = Meal
fields = ['title', 'description', 'price']
class CartMealSerializer(serializers.ModelSerializer):
meal = <strong>SimpleMealSerializer()</strong>
class Meta:
model = CartMeal
fields = ['id', 'meal', 'qty', 'final_price']
class CartSerializer(serializers.ModelSerializer):
meals = CartMealSerializer(many=True)
owner = CustomerSerializer()
class Meta:
model = Cart
fields = '__all__'