2014-09-03 9 views
5

मैं एक मॉडल WeddingInvite जो गिरावट आ रही है और इस तरह को आमंत्रित को स्वीकार करने के लिए एक विधि है के लिए:कैसे बेनकाब करने के लिए मॉडल के तरीकों django-आराम-ढांचे

class WeddingInvite(models.Model): 
    from_user=models.ForeignKey(User,related_name="person_inviting") 
    to_user=models.ForeignKey(User,related_name="person_invited") 
    wedding=models.ForeignKey(Wedding,related_name="wedding_invite") 
    status=models.IntegerField(choices=CHOICES) 

    def accept(self): 

     attending=Attending(attendant=to_user,wedding=Wedding) 
     attendant.save() 

     self.status=1 
     self.save() 

     notification.send([self.to_user],"invite_accepted",{"invitation":self}) 


    def decline(self): 
     self.status=2 
     self.save() 

मैं कैसे दृश्य या serializer करने के तरीकों का पर्दाफाश करते ताकि लोग को डीजेंगो-आराम-ढांचे के माध्यम से स्वीकार या अस्वीकार कर सकें ताकि इसे जेसन के रूप में पारित किया जा सके?

class WeddingInviteList(generics.ListCreateAPIView): 
    serializer_class=WeddingInviteSerializer 


    def list(self,request,*args,**kwargs): 
     wedding_invites=[] 

     invited=request.user 


     qs=WeddingInvite.objects.filter(Q(to_user=invited)) 
     for invite in qs: 
      wedding_invites.append({invite.from_user,"invited you to a wedding ",invite.wedding}) 

     return Response(wedding_invites)  

class WeddingInviteSerializer(serializers.ModelSerializer): 
     class Meta: 
      model=WeddingInvite 

मैं कैसे स्वीकार करते हैं और देखने या serializer में गिरावट तरीकों सक्षम कर सकता: यहाँ serializer और देखने कर रहे हैं?

संपादित करें: मुझे एहसास है कि एक धारावाहिक विधि फ़ील्ड है लेकिन यह एक मूल्य देता है। मुझे नहीं पता कि इसका उपयोग क्यों किया जा सकता है क्योंकि मेरे तरीके अलग-अलग रूप हैं serializer method field

इस या किसी अन्य तरीके से सही दिशा में एक बिंदु वास्तव में सहायक होगा।

+0

'वेडिंगइन्टाइट' मॉडल और 'APIView' के लिए 'मॉडलसेरियलाइज़र' के बारे में कैसे है जो POST या PUT अनुरोध स्वीकार करता है, जो सीरिएलाइज़र वैध है तो विधि को कॉल करता है? विशेष 'WeddingInvite' को पुनर्प्राप्त करने के लिए आपको get_object विधि की भी आवश्यकता होगी। – mrkre

+0

मुझे पता है कि मुझे get_object विधि को कॉल करना है, लेकिन स्वीकृति विधि के बारे में क्या मैं केवल स्वयं को स्वीकार करता हूं और अस्वीकरण के लिए self.decline स्वीकार करता हूं। मैं यूआरएल – zacmwa

+0

को अपने उत्तर की जांच कैसे करूं :) – mrkre

उत्तर

5

नीचे अनचाहे कोड, जो एक दृष्टिकोण है जो मैं ले सकता हूं।

अपने serializers के लिए:

class WeddingInviteResponseSerializer(serializers.Serializer): 
    response = serializers.BooleanField(required=True) 

अपने दृश्य के लिए, अधिक मान्यता तरीकों और उपयोगकर्ता चेकिंग में जोड़ने के लिए स्वतंत्र महसूस।

from django.http import Http404 
from rest_framework.views import APIView 
from .models import WeddingInvite 
from .serializers import WeddingInviteResponseSerializer 


class WeddingInviteResponseView(APIView): 
    serializer_class = WeddingInviteResponseSerializer 

    def get_object(self, pk): 
     try: 
      return WeddingInvite.objects.get(pk=pk) 
     except WeddingInvite.DoesNotExist(): 
      raise Http404 

    def post(self, request, pk): 
     serializer = self.serializer_class(data=request.DATA) 

     if serializer.is_valid(): 
      response = serializer.data['response'] 
      invite = self.get_object(pk) 

      if response.accept: 
       invite.accept() 
       return Response({'success': "Wedding Invited accepted"}) status=status.HTTP_200_OK) 
      else: 
       invite.decline() 
       return Response({'success': "Wedding Invited declined"}) status=status.HTTP_200_OK) 
     else: 
      return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

अंत में, बस अपने URL में निम्नलिखित अंत बिंदु का पर्दाफाश:

url(r'^invite/(?P<pk>\d+)/response$', WeddingInviteResponseView.as_view(), name='wedding-invite-response') 

आशा इस सही दिशा में बात करने के लिए मदद करता है।

+0

उत्तर के लिए धन्यवाद। शादी की आमंत्रण सूची के लिए उसी सीरिएलाइज़र क्लास का उपयोग करते समय इसे शादी के आमंत्रण के लिए विस्तृत विवरण में किया जा सकता है? – zacmwa

+1

अच्छा, हाँ यह संभव होगा। ModelSerializer में प्रतिक्रिया फ़ील्ड जोड़ें और पोस्ट/पुट अनुरोधों को सशर्त के आधार पर आवश्यक विधियों को कॉल करें। – mrkre

+0

'स्वीकार करें' में परिभाषित 'स्वीकार' कहां है: '? –

संबंधित मुद्दे