程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从序列化Django REST API中的字段中排除特定实例大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决从序列化Django REST API中的字段中排除特定实例?

开发过程中遇到从序列化Django REST API中的字段中排除特定实例的问题如何解决?下面主要结合日常开发的经验,给出你关于从序列化Django REST API中的字段中排除特定实例的解决方法建议,希望对你解决从序列化Django REST API中的字段中排除特定实例有所启发或帮助;

我想获取用户的聊天列表(字段是:聊天 ID、聊天参与者),但我不希望用户本身被列在聊天参与者中(我的意思是用户肯定必须在聊天参与者中,但是用户在请求他的聊天列表时不需要在其他名字中看到他自己的名字,因为它没有意义)。

这是聊天模型:

class Chat(models.Model):
ID = models.CharFIEld(_('ID'),priMary_key=True,default=hex_uuID,editable=false,max_length=32)
chat_participants = models.ManyToManyFIEld(User,blank=TruE)

class Meta:
    db_table = 'chat'
    verbose_name_plural = 'chats'

这是聊天序列化程序:

class Chatserializer(serializers.Modelserializer):
    chat_participants = ChatParticipantsserializer(many=True,read_only=TruE)

    class Meta:
        model = Chat
        fIElds = '__all__'

PS ChatParticipantsserializer(其模型为 User)用于获取参与者的姓名,而不仅仅是他们的 ID。

这是视图:

class ChatsListAPIVIEw(generics.ListAPIVIEw):
permission_classes = [IsAuthenticated]
serializer_class = Chatserializer

def get_queryset(self):
    return Chat.objects.filter(chat_participants=self.request.user.ID)

get_queryset 函数中的 PS 我检查用户是否在聊天组中(如果他是该组的聊天参与者之一)

现在我得到了 JsON:

[
{
    "ID": "a38609b1c86f4d71b0b300381db747b4","chat_participants": [
        {
            "ID": "044ad4f8876d4b8bb057a63769a33027","first_name": "jean","last_name": "Mel"
        },{
            "ID": "c01473b5d72a4b0ea40a4047ed297d77","first_name": "Sasha","last_name": "King"
        }
    ]
},{
    "ID": "4fdf4a34eaf6464baf55b08676b7d6a6","chat_participants": [
        {
            "ID": "c01473b5d72a4b0ea40a4047ed297d77","last_name": "King"
        },{
            "ID": "ffcf4d06958b4926bee833166279f0c6","first_name": "Anne","last_name": "brown"
        }
    ]
}
]

这是我的 JsON 格式的聊天列表。所以我得到了聊天的 ID,以及聊天中的所有参与者(这里只有两个参与者)。如果我是 Sasha King,我如何从 JsON 中的聊天参与者中删除这个名字,因为没有必要向他自己显示用户的名字(不知道,也许在序列化程序本身中编写一个排除 self.request.user 的函数。 ..)

我想得到这个:

 [
    {
        "ID": "a38609b1c86f4d71b0b300381db747b4","chat_participants": [
            {
                "ID": "044ad4f8876d4b8bb057a63769a33027","last_name": "Mel"
            }
        ]
    },{
        "ID": "4fdf4a34eaf6464baf55b08676b7d6a6","chat_participants": [
            {
                "ID": "ffcf4d06958b4926bee833166279f0c6","last_name": "brown"
            }
        ]
    }
]

解决方法

我还没有测试过代码,但这个想法应该可行。 基本上你过滤参与者而不是“手动”序列化他们

class Chatserializer(serializers.Modelserializer):
    chat_participants = serializerMethod()

    class Meta:
        model = Chat
        fields = '__all__'

    def get_chat_participants(self,obj):
        return ChatParticipantsserializer(obj.chat_participants.exclude(self.context["request"].user) many=True,read_only=TruE).data

大佬总结

以上是大佬教程为你收集整理的从序列化Django REST API中的字段中排除特定实例全部内容,希望文章能够帮你解决从序列化Django REST API中的字段中排除特定实例所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: