Как вернуть зацикленные значения в методе в Python / Django, который не использует массив - PullRequest
0 голосов
/ 29 декабря 2011

как я могу вернуть зацикленные значения в методе, который не использует массив, сейчас я использую массив.

вот мой код:

def get_ticket_sum_quantity(self, product_id, date_select):
    prod = Product.objects.get(id=product_id)
    sumOfQuantity = Ticket.objects.filter(date_select=date_select, product=prod).aggregate(Sum('quantity'))['quantity__sum']    
    if sumOfQuantity == None:
        sumOfQuantity = 0
    prodAvailable = prod.quantity - sumOfQuantity
    return prodAvailable 
def get_ticket_available_product(self, date_select, client_id, quantity):
    client = Client.objects.get(id=client_id)
    prodCount = Product.objects.filter(client=client_id,status='Active').values_list('id', flat=True)
    array = []
    for id in prodCount:
        prodAvailable = Ticket.objects.get_ticket_sum_quantity(id, date_select)
        prodAvailable = prodAvailable - quantity
        if prodAvailable < 0:
            data = {'id':id}
        else :
            data = {'id':id}
            data = data['id']
            array.append(data)
    return array

и когда я использовалэто и результат: ...

Ticket.objects.get_ticket_available_product('2011-12-29', 5, 1)
[3, 2, 6, 1]

мой вопрос: есть ли другие варианты, которые я не буду использовать массив, чтобы он возвращал, как это?

3
2
6
1

1 Ответ

2 голосов
/ 29 декабря 2011

Да, вы можете использовать

  1. Либо , чтобы преобразовать вашу функцию в генератор, чтобы после каждого вызова она возвращала следующее значение или генерировала StopIteration, если естьнет возвращаемого значения.

    def get_ticket_available_product(self, date_select, client_id, quantity):
        client = Client.objects.get(id=client_id)
        prodCount = Product.objects.filter(client=client_id,status='Active').values_list('id', flat=True)
        for id in prodCount:
            prodAvailable = Ticket.objects.get_ticket_sum_quantity(id, date_select)
            prodAvailable = prodAvailable - quantity
            if prodAvailable < 0:
                data = {'id':id}
            else :
                data = {'id':id}
                data = data['id']
                yield data
        return
    

Использование

data = get_ticket_available_product(self, date_select, client_id, quantity)
for d in data:
    print d
  1. Или Вы также можете разбить возвращенный список таким образомжелаемый

Пример

print '\n'.join(str(i) for i in [3, 2, 6, 1])

или как в этом случае

print '\n'.join(str(i) for i in Ticket.objects.get_ticket_available_product('2011-12-29', 5, 1) )
  1. Или Вы можете splitвозвращаемое значение таким образом.Помните, что в этом случае возвращаемое значение будет представлять собой строку

        data = data['id']
            array.append(data)
    return '\n'.join(str(i) for i in array )
    

Использование:

print Ticket.objects.get_ticket_available_product('2011-12-29', 5, 1)

Кстати:

Какова цельэтот фрагмент кода?

if prodAvailable < 0:
    data = {'id':id}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...