Tôi đã vượt qua vấn đề này nhiều lần, nhưng tôi đã không cố gắng tìm hiểu sâu hơn về nó. Bây giờ tôi hiểu vấn đề chính.
Lần này, vấn đề của tôi là nhập Trình tuần tự hóa (django và restframework) từ các mô-đun khác nhau như sau:
from rest_framework import serializers
from common import serializers as srlz
from prices import models as mdlpri
# the line below was the problem 'srlzprod'
from products import serializers as srlzprod
Tôi đã gặp một vấn đề như thế này:
from product import serializers as srlzprod
ModuleNotFoundError: No module named 'product'
Những gì tôi muốn thực hiện là như sau:
class CampaignsProductsSerializers(srlz.DynamicFieldsModelSerializer):
bank_name = serializers.CharField(trim_whitespace=True,)
coupon_type = serializers.SerializerMethodField()
promotion_description = serializers.SerializerMethodField()
# the nested relation of the line below
product = srlzprod.ProductsSerializers(fields=['id','name',],read_only=True,)
Vì vậy, như đã đề cập trong các dòng trên về cách giải quyết nó (nhập khẩu cấp cao nhất), tôi tiến hành thực hiện các thay đổi sau:
# change
product = srlzprod.ProductsSerializers(fields=['id','name',],read_only=True,)
# by
product = serializers.SerializerMethodField()
# and create the following method and call from there the required serializer class
def get_product(self, obj):
from products import serializers as srlzprod
p_fields = ['id', 'name', ]
return srlzprod.ProductsSerializers(
obj.product, fields=p_fields, many=False,
).data
Do đó, máy chủ django được thực thi mà không gặp vấn đề gì:
./project/settings/manage.py runserver 0:8002 --settings=settings_development_mlazo
Performing system checks...
System check identified no issues (0 silenced).
April 25, 2020 - 13:31:56
Django version 2.0.7, using settings 'settings_development_mlazo'
Starting development server at http://0:8002/
Quit the server with CONTROL-C.
Trạng thái cuối cùng của các dòng mã như sau:
from rest_framework import serializers
from common import serializers as srlz
from prices import models as mdlpri
class CampaignsProductsSerializers(srlz.DynamicFieldsModelSerializer):
bank_name = serializers.CharField(trim_whitespace=True,)
coupon_type = serializers.SerializerMethodField()
promotion_description = serializers.SerializerMethodField()
product = serializers.SerializerMethodField()
class Meta:
model = mdlpri.CampaignsProducts
fields = '__all__'
def get_product(self, obj):
from products import serializers as srlzprod
p_fields = ['id', 'name', ]
return srlzprod.ProductsSerializers(
obj.product, fields=p_fields, many=False,
).data
Hy vọng điều này có thể hữu ích cho mọi người khác.
Lời chào hỏi,