viewset update route register get_object_or_404 framework detail create apiview python django rest django-rest-framework

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.