2015-07-01 11 views
17

मैं डीआरएफ के लिए नया हूं और मैं कस्टम व्यू/सीरिएलाइज़र लिखने की कोशिश कर रहा हूं जिसका उपयोग मैं उपयोगकर्ता ऑब्जेक्ट के केवल एक फ़ील्ड को अपडेट करने के लिए कर सकता हूं।Django Rest Framework अद्यतन फ़ील्ड

मुझे उपयोगकर्ता के "नाम" को अपडेट करने के लिए तर्क बनाने की आवश्यकता है।

class ClientNameSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = ClientUser 
     fields = ('name',) 

    def update(self, instance, validated_data): 
     instance.name = validated_data.get('name', instance.name) 
     instance.save() 
     return instance 

इस विधि कभी नहीं कहा जाता है:

मैं serializer लिखा था। मैंने वहां ब्रेकपॉइंट सेट करने और इसे डीबग करने की कोशिश की, लेकिन इसे कभी भी नहीं कहा जाता है, भले ही मैं पुट, पोस्ट या पैच विधियों का उपयोग करता हूं। यदि मैं विधि जोड़ता हूं तो जब मैं POST का उपयोग करता हूं तो इसे कॉल किया जा रहा है।

class UpdateName(generics.CreateAPIView): 
    queryset = ClientUser.objects.all() 
    serializer_class = ClientNameSerializer 
    permission_classes = (permissions.IsAuthenticated,) 

किसी को कुछ सुझाव है:

इस तरह मेरे विचार की तरह लग रहा है? धन्यवाद!

मेरे models.py की तरह इस

class ClientUser(models.Model): 
    owner = models.OneToOneField(User,unique=True,primary_key=True) 

    phone_number = models.CharField(validators=[PHONE_REGEX],max_length=20,unique=True) 

    name = models.CharField(max_length=100,blank=True) 
    status = models.IntegerField(default=1) 
    member_from = models.DateTimeField('member from',auto_now_add=True) 
    is_member = models.BooleanField(default=False) 
+0

क्या आप 'models.py' के लिए भी कोड जोड़ सकते हैं। –

+0

@RahulGupta मैंने अपना मॉडल जोड़ा। धन्यवाद! – bla0009

उत्तर

14

क्या तरीकों endpoint स्वीकार कर सकते हैं, ध्यान में रखते हुए किया जाता है serializer में नहीं की परिभाषा लग रहा है।

अद्यतन विधि आप अपने serializer के तहत राशि की जरूरत है आपके विचार में ले जाया जा ताकि आप की तरह कुछ होगा:

# serializers.py 
class ClientNameSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = ClientUser 

# views.py 
class UpdateName(generics.UpdateAPIView): 
    queryset = ClientUser.objects.all() 
    serializer_class = ClientNameSerializer 
    permission_classes = (permissions.IsAuthenticated,) 

    def update(self, request, *args, **kwargs): 
     instance = self.get_object() 
     instance.name = request.data.get("name") 
     instance.save() 

     serializer = self.get_serializer(instance) 
     serializer.is_valid(raise_exception=True) 
     self.perform_update(serializer) 

     return Response(serializer.data) 

लें ध्यान दें कि आप UpdateModelMixin अधिभावी रहे हैं और आप को बदलने की जरूरत हो सकती है इसे सही करने के लिए कोड के ऊपर थोड़ा सा।

+0

धन्यवाद, मैं इसे आज रात कोशिश करूँगा और पुष्टि करता हूं कि यह काम करता है! – bla0009

+0

हाय, इस लाइन पर विधि ब्रेक अपडेट करें: 'instance = self.get_object()' – bla0009

+0

यह त्रुटि है जो मुझे मिली: 'अपेक्षित दृश्य अपडेटनाम को "पीके" नामक यूआरएल कीवर्ड तर्क के साथ बुलाया जाना चाहिए। अपने यूआरएल conf को ठीक करें, या दृश्य पर .lookup_field विशेषता को सही ढंग से सेट करें – bla0009