python - route - partial update django rest framework
Cómo exponer los métodos modelo a django-rest-framework (1)
Código no probado a continuación, que es un enfoque que puedo tomar.
Para sus serializadores:
class WeddingInviteResponseSerializer(serializers.Serializer):
response = serializers.BooleanField(required=True)
Para su visión, siéntase libre de agregar más métodos de validación y verificación de usuarios.
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)
Finalmente, solo expone el siguiente punto final en tus URL:
url(r''^invite/(?P<pk>/d+)/response$'', WeddingInviteResponseView.as_view(), name=''wedding-invite-response'')
Espero que esto te ayude a orientarte en la dirección correcta.
Tengo un WeddingInvite modelo que tiene un método para declinar y aceptar la invitación de esta manera:
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()
¿Cómo expongo los métodos a la vista o al serializador para que las personas puedan aceptar o rechazar a través de django-rest-framework para que se pueda pasar como json? Aquí están el serializador y la vista:
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
¿Cómo habilito los métodos de aceptar y rechazar en la vista o el serializador?
EDITAR: me doy cuenta de que hay un campo de método de serializador pero devuelve un valor. No sé si esto se puede utilizar ya que mis métodos son diferentes de este campo de ejemplo de serializador de ejemplo
Un punto en la dirección correcta con respecto a esto o de cualquier otra manera sería realmente útil.