при вызове метода несколько раз, некоторые данные отсутствуют при использовании django rest serializer? - PullRequest
0 голосов
/ 21 декабря 2018

serializer.py

Метод get_invoice_list, вызывающий invoice_date () несколько раз, но некоторые данные отсутствуют, когда я пытаюсь преобразовать invoice_list в dict,

class InvoiceDetailSerializer(ModelSerializer):

    invoice_list = serializers.SerializerMethodField()

    def get_invoice_list(self, obj):

        invoice_list =[]
        if obj.get_invoice_users.all():
            first = False
            second = False
            third = False

            reg_invoices = obj.get_invoice_users.all().filter(type__in=[0,1]).order_by('created_date')            
            if reg_invoices:
                inv_string = 'INV'+str(obj.get_invoice_number)+'001'
                new_list1 = self.get_invoice_data(reg_invoices, inv_string)
                invoices_list.append(new_list)
                first = True                

            hotel_invoices = obj.get_invoice_users.all().filter(type__in=[3,5]).order_by('created_date')
            if hotel_invoices:
                second = True
                if first:
                    inv_string = 'INV'+str(obj.get_invoice_number)+'002'
                else:
                    inv_string = 'INV'+str(obj.get_invoice_number)+'001'
                new_list2 = self.get_invoice_data(hotel_invoices, inv_string)
                invoices_list.append(new_list2)
        return invoices_list       
    def get_invoice_data(self, inv_list, inv_key):

        invoices_list = []
        reg_invoices_list = []
        index=0
        new_dict = {}
        for index, each_invoice in enumerate(inv_list):

            new_dict['first_name'] = each_invoice.users.user.first_name
            new_dict['invoice_number'] = inv_key
            return new_dict  

представление:

class InvoiceDetailViewSet(ModelViewSet):
    serializer_class = InvoiceDetailSerializer
    queryset = EventUsers.objects.all()
    permission_classes = [AllowAny, ] 

ответ:

Теперь я получаю ответ, подобный этому,

[ 
 {
        "invoice_list": [
            {
                "invoice_number": "INV013001",
                "first_name": "546546",

            },
            {
                "invoice_number": "INV013002",
                "first_name": "546546",

            }
        ]
    }
]

Я хочу второй dict, т.е. "invoice_number": "INV013002", как другой, не вАррей, как я могу это сделать,

[
    {
    "invoice_list": [
        {
            "invoice_number": "INV013001",
            "first_name": "546546",

        }
    ]
},
{
    "invoice_list": [
        {
             "invoice_number": "INV013002",
              "first_name": "546546",
        }
    ]
},
]

1 Ответ

0 голосов
/ 21 декабря 2018
  def get_invoice_data(self, inv_list, inv_key):

    invoices_list = []
    reg_invoices_list = []
    index=0
    new_dict = {}
    for index, each_invoice in enumerate(inv_list):

        new_dict['first_name'] = each_invoice.users.user.first_name
        new_dict['invoice_number'] = inv_key

    return {'invoices_list': invoices_list.appen(new_dict)}
...