2015-07-01 31 views
17

DRF'de yeniyim ve yalnızca bir kullanıcı nesnesi alanını güncelleştirmek için kullanabileceğim özel görünüm/seri hale getirici yazmaya çalışıyorum.Django Rest Framework güncelleştirme alanı

Sadece kullanıcının "adını" güncelleştirmek için mantık yapmalıyım. Bu yöntem asla denir

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 

:

ben seri hale yazdım. Orada kesme noktası ayarlamayı denedim ve hata ayıklamayı denedim, ancak PUT, POST veya PATCH yöntemlerini kullansam bile hiçbir zaman çağrılmaz. eklediğimde yöntemi oluşturduğumda POST kullandığımda çağrılıyor.

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

kimse bazı öneri var mı:

Bu benim bakış benziyor nasıl? Teşekkürler!

Benim models.py uç nokta kabul edebilir yöntemler değil serileştiriciye içinde, görünümde yapılan şeyin bu

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

Ayrıca, "models.py" kodunu da ekleyebilirsiniz. –

+0

@RahulGupta Modelimi ekledim. Teşekkürler! – bla0009

cevap

14

tanımı gibi görünüyor. Eğer böyle bir şey olur böylece serileştiriciye altında sahip güncelleme yöntemi ihtiyacı

görünümünüze taşınmasına:

# 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) 
Eğer UpdateModelMixin geçersiz konum ve değiştirmek gerekebilir

not alın Yukarıdaki kod doğru almak için biraz.

+0

Teşekkürler, bu gece deneyeceğim ve çalışıp çalışmadığını onaylayacağım! – bla0009

+0

Merhaba, bu satırda yöntem sonlarını güncelleştirin: 'instance = self.get_object()' – bla0009

+0

Aldığım hata budur: "Beklenen görünümü UpdateName" pk "adlı bir URL anahtar sözcüğü argümanıyla çağrılacak. URL'nizi düzeltin ya da .lookup_field özniteliğini doğru bir şekilde ayarlayın ' – bla0009

İlgili konular