मैं एक एपीआई बनाने के लिए Django बाकी ढांचे का उपयोग कर रहा हूँ। कहो मेरे पास निम्नलिखित मॉडल हैं:

class Category(models.Model):
    name = models.CharField(max_length=100)

    def __unicode__(self):
        return self.name


class Item(models.Model):
    name = models.CharField(max_length=100)
    category = models.ForeignKey(Category, related_name='items')

    def __unicode__(self):
        return self.name

मैं आइटम के लिए एक सीरिएलाइज़र लिखना चाहता हूं जैसे कि यह क्रमबद्धता के दौरान "श्रेणी_नाम" लौटाता है (यानी पढ़ा जाता है) लेकिन फिर "श्रेणी_नाम" भी वापस लेता है और इसे deserialization के दौरान श्रेणी में परिवर्तित करता है (यानी लिखें) [आप मान सकते हैं कि श्रेणी_नाम अपने में अद्वितीय है टेबल]

मैं इस लिंक को खोजने में सक्षम था। /a> जो पढ़ने के लिए समस्या हल करता है लेकिन लिखने के लिए काम नहीं करता है।

class ItemSerializer(serializers.ModelSerializer):
    category_name = serializers.CharField(source='category.name')

    class Meta:
        model = Item
        fields = ('id', 'name', 'category_name')

क्या इसे संशोधित करने का कोई तरीका है कि इसका उपयोग एपीआई के माध्यम से नई वस्तुओं को पॉप्युलेट करने के लिए किया जा सकता है?

2
Nikhil Garg 2 जिंदा 2021, 16:37

1 उत्तर

सबसे बढ़िया उत्तर

SlugRelatedField वह है जिसे आप ढूंढ रहे हैं। यह पढ़ना और लिखना दोनों है।

class ItemSerializer(serializers.ModelSerializer):
    category = serializers.SlugRelatedField(
        slug_field='name',
        queryset=Category.objects.all()
     )

    class Meta:
        model = Item
        fields = ('id', 'name', 'category')

सटीकता: आपको अपने model.py में अपना category.name Unique=True बनाना होगा।

3
Guillaume 2 जिंदा 2021, 16:54
यह पूरी तरह से काम किया, बहुत बहुत धन्यवाद!
 – 
Nikhil Garg
2 जिंदा 2021, 20:52