मैं इस मुद्दे के साथ कई बार पार कर चुका हूं, लेकिन मैंने इसके बारे में गहराई से खुदाई करने की कोशिश नहीं की। अब मैं मुख्य मुद्दे को समझता हूं।
इस बार मेरी समस्या निम्नलिखित जैसे विभिन्न मॉड्यूल से 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
आशा है कि यह अन्य सभी के लिए सहायक हो सकता है।
अभिवादन,