小编zac*_*mwa的帖子

如何将模型方法公开给django-rest-framework

我有一个模型WeddingInvite,它有一个拒绝和接受邀请的方法,如下所示:

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()
Run Code Online (Sandbox Code Playgroud)

如何将方法公开给视图或序列化程序,以便人们可以通过django-rest-framework接受或拒绝它,以便它可以作为json传递?这是序列化器和视图:

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
Run Code Online (Sandbox Code Playgroud)

如何在视图或序列化程序中启用接受和拒绝方法?

编辑:我意识到有一个序列化方法字段,但它返回一个值.我不知道是否可以使用这个,因为我的方法与此示例序列化方法字段不同

关于这种或任何其他方式的正确方向的一点将是非常有帮助的.

python django rest django-rest-framework

6
推荐指数
1
解决办法
2326
查看次数

如何在django-rest-framework中覆盖默认的create方法

我有一个模型在管理器中使用不同的create方法.如何重写此方法,以便ListCreateAPIView中的post方法使用我编写的方法而不是默认方法.这是方法.

class WeddingInviteManager(models.Manager):


 def create(self, to_user, from_user, wedding):
      wedding_invitation =  self.create(from_user=from_user,to_user=to_user, 
                                        wedding=wedding)
      notification.send([self.to_user], 'wedding_invite',{'invitation':wedding_invitation})

      return wedding_invitation
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework

6
推荐指数
1
解决办法
4494
查看次数

Django Rest框架拒绝接受多部分表单数据

我正在尝试发布具有嵌套json,图像和其他数据的数据。json看起来像这样:

{
    "id": ,
    "venue": {
        "id": ,
        "name": "",
        "city": "",
        "address": "",
        "rating": null,
        "point": null
    },
    "name": "",
    "time": "",
    "event_pic": null,
    "description": "",
    "event_type": "Movie",
    "invite_only": ,
    "free": ,
    "age_restriction": ,
    "ticket_price": ,
    "user": 
}
Run Code Online (Sandbox Code Playgroud)

我遇到了一个问题,由于某种原因,如果我尝试使用分段表单上传,则会收到如下错误消息:

Request http://zacmwa.pythonanywhere.com/api/events/ (7417ms)
    02-14 16:21:26.468 7133-7762/com.wyat.wyat D/OkHttp: Server: openresty/1.9.15.1
    02-14 16:21:26.468 7133-7762/com.wyat.wyat D/OkHttp: Date: Tue, 14 Feb 2017 13:21:26 GMT
    02-14 16:21:26.468 7133-7762/com.wyat.wyat D/OkHttp: Content-Type: application/json
    02-14 16:21:26.468 7133-7762/com.wyat.wyat D/OkHttp: Transfer-Encoding: chunked
    02-14 16:21:26.468 7133-7762/com.wyat.wyat D/OkHttp: Connection: keep-alive
    02-14 16:21:26.468 …
Run Code Online (Sandbox Code Playgroud)

python django json django-rest-framework

5
推荐指数
1
解决办法
1981
查看次数

Django-Rest-Framework:如何使用request.user为登录用户发布到foreignkey字段

我正在使用Django rest Framework来使api被Android应用程序使用.我有一个活动模型和地点:

  class Event(models.Model):
     user=models.ForeignKey(User,related_name="%(class)s")
     title=models.CharField(max_length=256)
     venue=models.ForeignKey(Venue,related_name="%(class)s_venue")
     description=models.CharField(max_length=256)
     time=models.DateTimeField(max_length=256)
     event_pic=models.ImageField(upload_to="photos/event_pic/%Y/%m/%d",null=True,blank=True)

     album=models.ForeignKey(Album,null=True,blank=True,related_name="%(class)s_album")
     photo=models.ForeignKey(Photo,null=True,blank=True,related_name="%(class)s_photo")

     likes=GenericRelation(Like,null=True,blank=True)
     comments=GenericRelation(Comments,null=True,blank=True)
Run Code Online (Sandbox Code Playgroud)

这是我的场地模型.

class Venue(models.Model):
     name=models.CharField(max_length=256)
     longitude=models.FloatField(null=True,blank=True)
     latitude=models.FloatField(null=True,blank=True)

     def __unicode__(self):
         return self.name
Run Code Online (Sandbox Code Playgroud)

我想使用request.user和使用name的场地字段发布到用户字段.是否可以这样做,如果是这样,我该怎么做.以下是序列化程序和视图.

class WeddingList(generics.ListCreateAPIView):    

     queryset=Wedding.objects.all()
     serializer_class=WeddingSerializer


class WeddingDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset=Wedding.objects.all()
     serializer_class=WeddingSerializer





class VenueList(generics.ListCreateAPIView):
     queryset=Venue.objects.all()
     serializer_class=VenueSerializer

class VenueDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset=Venue.objects.all()
     serializer_class=VenueSerializer

class VenueSerializer(serializers.ModelSerializer):
      class Meta:
           model=Venue
           fields=('name')

class WeddingSerializer(serializers.ModelSerializer):


      class Meta:
           model = Wedding
           excludes=('id',)
Run Code Online (Sandbox Code Playgroud)

python django rest django-rest-framework

3
推荐指数
2
解决办法
1495
查看次数

标签 统计

django ×4

django-rest-framework ×4

python ×4

rest ×2

json ×1