মডেল সম্পত্তি ব্যবহার করে মডেলসিরাইজার


101

আমি একটি সম্পত্তি ক্ষেত্র সমন্বিত এমন একটি মডেলকে সিরিয়ালাইজ করার চেষ্টা করছি যা আমিও সিরিয়াল করতে চাই।

মডেল.পি:

class MyModel(models.Model):
    name = models.CharField(max_length=100)
    slug = models.AutoSlugField(populate_from='name')

    @property
    def ext_link(self):
        return "/".join([settings.EXT_BASE_URL, self.slug])

সিরিয়ালাইজার.পি:

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ('name', 'ext_link')

সম্পর্কিত ইউআরএল-তে যাওয়ার চেষ্টা করার সময়, আমি ext_linkসম্পত্তিটিতে সিরিয়ালাইজারের ব্যতিক্রম (কী-ইরর) পাচ্ছি ।

আমি কীভাবে ext_linkসম্পত্তিটি সিরিয়াল করতে পারি ?

উত্তর:


138

কারণ এটি কোনও মডেল ক্ষেত্র নয়, এটি সিরিয়ালাইজার শ্রেণিতে স্পষ্টভাবে যুক্ত করা দরকার

class MyModelSerializer(serializers.ModelSerializer):
    ext_link = serializers.Field()

    class Meta:
        model = MyModel
        fields = ('name', 'ext_link')

4
একটি নোট : মেটাতে ক্ষেত্রগুলির তালিকাটি isচ্ছিক। যদি আপনি বাদ দেনfieldsতবে উপরের উদাহরণে, আপনিসিরিয়ালযুক্ত ডেটাতেসমস্তMyModelক্ষেত্র প্লাস পাবেনext_link। এবং জটিল মডেলের জন্য এটি সত্যিই দুর্দান্ত! সম্পাদনা : কমপক্ষে, এটি সত্যdjangorestframework==2.3.14
e.thompsy

আমার জন্য, সিরিয়ালাইজার ব্যবহার করে F ফিল্ড একটি ত্রুটি দিয়েছে। "সিরিয়ালাইজার.আরেডলিফিল্ড" কাজ করে যদি_প্রেসেন্টেশন সংজ্ঞায়িত না করা হয় এবং দৃশ্যটি কেবল পঠনযোগ্য।
শশাঙ্ক সিঙ্গলা

15
আমি 3.3.x ব্যবহার করছি এবং কেবল ক্ষেত্রগুলিতে বৈশিষ্ট্য যুক্ত করা যথেষ্ট নয়। আমাকে এখনও স্পষ্টভাবে ext_link = সিরিয়ালাইজারের মাধ্যমে যুক্ত করতে হবে Rঅনলিফিল্ড () পড়ুন।
জারমড

4
পাইথন ৩.৩.১ এবং জ্যাঙ্গো ১.১০ তে ডিআরএফ ৩.৪..6 ব্যবহার করে ক্ষেত্রগুলিতে যুক্ত করে সূক্ষ্ম কাজ করে।
বৈভব মিশ্র

9
দ্রষ্টব্য: ব্যবহার করে fields = "__all__"আমাকে myfield = serializers.ReadOnlyField()ar.7. version সংস্করণ ব্যবহার করে নির্দিষ্ট জারোমড হিসাবে যুক্ত করতে হয়েছিল
রবার্ট টাউনলি

22

@Robert Townleyএর মন্তব্য হিসাবে , সংস্করণ সহ এই কাজ3.8.2 :

class MyModelSerializer(serializers.ModelSerializer):
    ext_link = serializers.ReadOnlyField()

    class Meta:
        model = MyModel
        fields = "__all__"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.