Как показать данные поля manytomany в формате json - django

Я пытаюсь показать множество данных в формате json (без использования сериализатора), вот мой models.py

class CustomerInvoice(models.Model):
    customer = models.CharField(max_length=50)
    items_model = models.ManyToManyField(Item,through='InvoiceItem')
    created_at = models.DateTimeField(auto_now_add=True)

class InvoiceItem(models.Model):
    item = models.ForeignKey(Item,on_delete=models.CASCADE)
    invoice = models.ForeignKey(CustomerInvoice,on_delete=models.CASCADE,related_name='invoice')
    quantity = models.IntegerField()
    price = models.DecimalField(max_digits=20,decimal_places=2)

Возможно ли сделать базу поиска по данным "многие ко многим"? что-то вроде этого: Q(items_model__icontains=query_search), а также как вернуть данные M2M в json формат используя values() и json.dumps пожалуйста? Это возвращает ID Values('items_model') и это не работает Values('items_model__all') и вот мой views.py

def invoices_all_lists(request):
    if request.is_ajax():
        query_search = request.GET.get('filter')
        if query_search:
            all_item_qs = CustomerInvoice.objects.all()
            a = []
            for i in all_item_qs.items_model.all():
                a.append(i.item.name)

            invoices = CustomerInvoice.objects.annotate(
                total=Sum((F('invoice__quantity') * F('invoice__price')),output_field=DecimalField(decimal_places=2,max_digits=20))
            ).filter(
                Q(id__icontains=query_search) | Q(seller__username__icontains=query_search) | 
                Q(customer__icontains=query_search)).values(
                    'id','seller__username','customer','total','created_at','items_model').order_by('-id')

        else:
            all_item_qs = CustomerInvoice.objects.all()

            a = []
            for data in all_item_qs:
                for i in data.items_model.all():
                    a.append(i.item.name)

            invoices = CustomerInvoice.objects.annotate(
                total=Sum((F('invoice__quantity') * F('invoice__price')) ,output_field=DecimalField(decimal_places=2,max_digits=20))                
            ).values(
                    'id','seller__username','customer','total','created_at','items_model').order_by('-id')        
        start_from = 0
        if request.GET.get('start'):
            start_from = int(request.GET.get('start'))
        limit = 10
        if request.GET.get('limit'):
            limit = int(request.GET.get('limit'))

        data_lists = []
        for index,value in enumerate(invoices[start_from:start_from+limit],start_from):
            value['counter'] = index+1
            data_lists.append(value)
        
        data = {
            'objects':data_lists,
            'length':invoices.count(),       
        }
        return HttpResponse(json.dumps(data, indent=4, sort_keys=True, default=str),'application/json')
    else:
        return redirect('invoiceapp:list-all-invoice')

могу ли я добавить эту часть кода в запрос?

a = []
for data in all_item_qs:
    for i in data.items_model.all():
        a.append(i.item.name)

примечание: я использовал datatable на стороне сервера в клиентской части

Вернуться на верх