【发布时间】:2017-08-15 16:20:19
【问题描述】:
我需要使用 Django Rest 框架构建一个社交网络后端,每个用户都可以在其中查看存储在 Feeds-Table 中的朋友的 Feed。我目前正在使用视图来生成输出。
这是我的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 响应。
{
"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"
]
]
}
}
所以我很困惑这是正确的做法,还是有更好的方法在休息框架中使用序列化器来做到这一点。
任何建议或更正都非常感谢并提前感谢
编辑
我也尝试了一些序列化器类,我可以在其中获取所有用户的提要,但我无法过滤好友的提要,使用 Friends_list 模型。
序列化器.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)
在这里我被困在哪里应用过滤器来获取用户的朋友
【问题讨论】:
-
DRF 序列化器是更好的方法
-
@Ykh 你能提出一些想法,比如应该使用什么序列化程序以及应该在哪里进行朋友过滤。
-
将好友列表从列表更改为查询集
标签: rest django-models django-views django-rest-framework