ฉันได้ข้ามกับปัญหานี้หลายครั้ง แต่ฉันไม่ได้พยายามที่จะขุดลึกลงไปเกี่ยวกับเรื่องนี้ ตอนนี้ฉันเข้าใจประเด็นหลักแล้ว
เวลานี้ปัญหาของฉันคือการนำเข้า Serializers (django และ restframework) จากโมดูลต่าง ๆ เช่นต่อไปนี้:
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
ฉันพบปัญหาเช่นนี้:
from product import serializers as srlzprod
ModuleNotFoundError: No module named 'product'
สิ่งที่ฉันต้องการสำเร็จคือต่อไปนี้:
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,)
ดังนั้นตามที่กล่าวไว้ข้างต้นวิธีการแก้ปัญหา (นำเข้าระดับบนสุด) ฉันดำเนินการเปลี่ยนแปลงต่อไปนี้:
# 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
ดังนั้น django runserver จึงถูกเรียกใช้โดยไม่มีปัญหา:
./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.
สถานะสุดท้ายของบรรทัดรหัสคือ:
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
หวังว่านี่จะเป็นประโยชน์สำหรับคนอื่น ๆ
ทักทาย,