【问题标题】:Django serializers accessing multiple tables with ForeignKey RelationshipsDjango 序列化程序使用外键关系访问多个表
【发布时间】: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


【解决方案1】:

你可以使用 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

不要忘记将此字段包含在元类字段属性中 更多关于序列化方法字段linkhttp://www.django-rest-framework.org/api-guide/fields/#serializermethodfield

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    相关资源
    最近更新 更多