我需要使用Django Rest框架构建社交网络后端,其中每个用户都可以看到来自他们的朋友的Feed,这些内容存储在Feeds-Table中。我目前正在使用视图来生成输出。
这是我的models.py
from django.contrib.auth.models import User
from django.db import models
class Friends_list(models.Model):
profile=models.ForeignKey(User,related_name="user_name")
friends=models.ForeignKey(User,related_name="friends_name")
accepted = models.BooleanField(default=False)
date_of_follow = models.DateTimeField(auto_now=True)
def __str__(self):
return self.profile.username
class Feeds(models.Model):
author=models.ForeignKey(User,related_name='feed_creator')
text=models.CharField(max_length=2000,blank=True)
date_feed=models.DateTimeField(auto_now=True)
def __str__(self):
return self.creator.username
这是我的views.py
class Friends_feed(APIView):
permissions_class = (IsAuthenticated,)
def post(self,request):
user_id=User.objects.get(id=request.POST.get('user_id'))
friends_list=Friends_list.objects.filter(profile=user_id).values_list('friends',flat=True)
feedlist={}
for i in friends_list:
uu=User.objects.get(id=i)
friends_data=list(Feeds.objects.filter(author=uu).values_list('id','text','date_feed').order_by('-date_feed')[:1])
friends_data.insert(0,uu.username)
feedlist[uu.id]=friends_data
return Response({'flist':feedlist})
这就是我的json Response。
{
"flist": {
"1": [
"sakshi",
[
4,
"hey this is me sakshi",
"2017-03-17T07:05:44.158641Z"
]
],
"9": [
"vivekkk",
[
6,
"my first post on bespal.... hurraay:",
"2017-03-17T07:06:41.377392Z"
]
],
"15": [
"levis",
[
7,
"my seconf post",
"2017-03-17T10:00:00.111989Z"
]
]
}
}
所以我很困惑,如果这是正确的方法,或者有更好的方法在休息框架中使用序列化器。
任何建议或更正都表示赞赏,并提前致谢
EDITS
我也尝试了一些Serializer类,我可以获得所有用户的提要,但是我无法使用Friends_list模型过滤Friends的提要。
serializers.py
from django.contrib.auth.models import User
class Fserializer(serializers.ModelSerializer):
class Meta:
model=Feeds
fields=['text','date_feed']
class Feedserializer(serializers.ModelSerializer):
feed_creator=Fserializer(many=True)
class Meta:
model=User
fields=['username','feed_creator']
和views.py
class Friends_feed(APIView):
serializer_class=Feedserializer
def post(self,request):
serializer=Feedserializer(friendsquery,many=True)
return Response(serializer.data)
在这里我被困在哪里应用过滤器来吸引用户的朋友
答案 0 :(得分:0)
你可以使用SerializerMethodField ......就像这样......
不要忘记在meta class fields属性中包含此字段 更多关于serializermethodfield link http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield 的信息class Feedserializer(serializers.ModelSerializer): field = serializers.SerializerMethodField('get_field_detail') def get_field_detail(self, obj): '''you can apply your logic here to get required data''' try: obj = ClassName.objects.get(id=obj.movie.id) bj_ser = ClassNameSerializer(obj) return crmobj_ser.data except: return None