我有一个模型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)
如何在视图或序列化程序中启用接受和拒绝方法?
编辑:我意识到有一个序列化方法字段,但它返回一个值.我不知道是否可以使用这个,因为我的方法与此示例序列化方法字段不同
关于这种或任何其他方式的正确方向的一点将是非常有帮助的.
我有一个模型在管理器中使用不同的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) 我正在尝试发布具有嵌套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) 我正在使用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)