मेरे पास एक ही मॉडल के कुछ डीआरएफ धारावाहिक वर्ग हैं। मैं कोड पुनरावृत्ति से बचने के लिए कक्षा निर्माण कोड को फ़ंक्शन में ले जाना चाहता हूं।
तो मूल रूप से मुझे एक समारोह से कक्षा वापस करनी है, लेकिन मैं कक्षा के अंदर फ़ंक्शन पैरामीटर तक पहुंचने में असमर्थ हूं।
def get_course_serializer(fields, read_only_fields=None):
class CourseSerializer(serializers.ModelSerializer):
if "id" in fields:
id = serializers.CharField(default="", read_only=True)
class Meta:
model = Course
fields = fields
if read_only_fields:
read_only_fields = read_only_fields
return CourseSerializer
यहां फ़ील्ड CourseSerializer वर्ग परिभाषा के अंदर पहुंच योग्य नहीं हैं। मैंने वैश्विक कीवर्ड का उपयोग करने की कोशिश की, लेकिन यह काम नहीं किया।
मैं नीचे के रूप में इस समारोह का उपयोग करने की योजना बना रहा हूँ
CourseListSerializer = get_course_serializer(
["id", "title", "slug", "description"])
1 उत्तर
आप अपनी कक्षा को गतिशील रूप से बनाने के लिए type
का उपयोग कर सकते हैं, इस तरह कुछ काम करना चाहिए (अवांछित):
def get_course_serializer(fields, read_only_fields=None):
mapping = {}
if "id" in fields:
mapping["id"] = serializers.CharField(default="", read_only=True)
...
CourseSerializer = type("CourseSerializer", (serializers.ModelSerializer, ), mapping)
return CourseSerializer
संबंधित सवाल
नए सवाल
django
Django एक ओपन-सोर्स सर्वर-साइड वेब एप्लीकेशन फ्रेमवर्क है जिसे पायथन में लिखा गया है। यह कम कोड, विशेष-अतिरेक पर विशेष ध्यान देने और निहित से अधिक स्पष्ट होने के साथ जटिल डेटा-संचालित वेबसाइटों और वेब एप्लिकेशन बनाने के लिए आवश्यक प्रयास को कम करने के लिए डिज़ाइन किया गया है।
global
के बजायnonlocal
काम करता है? यदि नहीं, तो आपकोtype
docs के 3 तर्क फॉर्म का उपयोग करना पड़ सकता है .python.org/3/library/functions.html#typefields
तक पहुंचने में सक्षम नहीं हूं। लेकिन आप गतिशील रूप सेtypes
(डॉक्टर यहां देखें) का उपयोग कर सकते हैं अपनी कक्षा परिभाषा बनाएं।type
का उपयोग करने के लिए, मुझे विधि परिभाषाएँ और विशेषताएँ प्रदान करनी होंगी, इसलिए मूल रूप से मुझेtype
के लिए आवश्यक सभी फ़ील्ड प्रदान करने होंगे। तो फिर से बहुत सारे कोड दोहराव होंगे।type
दृष्टिकोण का उपयोग करके एक उत्तर पोस्ट किया है। आपtypes
का भी उपयोग कर सकते हैं लेकिन मुझे इस मामले में इसका उपयोग करने का कोई लाभ नहीं दिख रहा है।