如何根据Django中的数组使用queryset filter属性?

2024-03-29 02:33:21 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有:

data= request.data['participants'] 
Conversation.objects.filter(participants = data).values()

如果数据是参与者的数组,我想得到那些参与者参与的对话。你知道吗

我想将数组与外键(一对多)进行比较,以获得包含这些参与者的对话。你知道吗

      {
        "conversation_id": 38,
        "created_at": "2017-08-14T09:15:19.776000Z",
        "name": "first conversation",
        "participants": [
            {
                "id": 1,
                "username": "zezor93",
            },
            {
                "id": 64,
                "username": "tasus22",
            }
        ]

    }

对话模式:

class Conversation(models.Model):
    user = models.ForeignKey(User, null=False)
    participants = models.ManyToManyField(User, related_name='participants')
    created_at = models.DateTimeField(_('created at'), auto_now_add=True)
    name = models.CharField(_("file title"), max_length=50, null=True, blank=True)

会话序列化程序:

class ConversationSerializer(ModelSerializer):
    user = UserSerializer(many=False, read_only=True)
    participants = UserSerializer(many=True, read_only=True)

    class Meta:
        model = Conversation
        fields = '__all__'

我想根据参与者数组进行过滤的原因是,当我创建一组参与者的对话时,我需要知道是否有与这些确切参与者的对话,所以我不会创建它,我只会返回它,如果他们不是确切的参与者,我会创建一个新的对话。你知道吗


Tags: nameidtruedatamodelsusername数组对话
2条回答
Conversation.objects.filter(participants__username__in = [participant['username'] for participant in data]).values()

我不太清楚你打算做什么。Hope this helps you

Conversation.objects.filter(participants__id__in = [x['id'] for x in data]).values()

相关问题 更多 >