2013-10-23 4 views
0

장고에서 카테고리 모델의 예산을 업데이트하고 싶습니다.장고에서 동시에 여러 결과 업데이트

class Category(models.Model): 
    user = models.ForeignKey(User) 
    name = models.CharField(max_length=128) 
    budget = models.DecimalField(default=0.0, decimal_places=2, max_digits=12, help_text="Amount in dollars ($)") 
내가 종류의 데이터의 수와 같습니다이 같은 새로운 예산의 목록 것

:

>>> for budget in new_category_budget: 
...  Category.objects.filter(user=2).update(budget=budget) 
... 
3L 
3L 
3L 

그러나 모든 :이 같은 업데이트하고

>>> new_category_budget 
[Decimal('2700.000'), Decimal('750.000'), Decimal('1500.000')] 

을 이들은 동일한 데이터를 반환합니다. 내 업데이트 성명서에 무슨 문제가 있습니까?

+0

무엇을 기대합니까? – Rohan

답변

0

예산 값을 반복하고 모두 사용자가 2 인 레코드를 각 값에 업데이트하여 이전 값보다 우선합니다.

QuerySet.update의 반환 값은 업데이트 된 레코드의 수입니다. update()를 호출 할 때마다 세 개의 레코드가 업데이트 된 결과를 얻습니다.

나는 확실히 당신이 실제로 뭘 하려는지 이해가 안하지만, 이런 식으로 뭔가 (테스트되지 않은!) 수도 : 물론

for (budget, category) in zip(new_category_budget, list(Category.objects.filter(user=2)): 
    category.budget=budget 
    category.save() 

이 그 필터링 된 범주의 수를 정확하게 가정 new_category_budget에있는 예산 수와 일치하고 카테고리에 대한 반복 순서도 분명하지 않습니다. 대체로 이상하게 보입니다.

+0

이것이 내가 원하는 것입니다. 감사 – pynovice

0

QuerySet에 전화하면 QuerySet의 모든 항목이 해당 값으로 설정됩니다. 예 : here을 참조하십시오.

따라서 for 루프를 통해 user=2 인 모든 Category 개체를 각 budget에 업데이트하고 있습니다. for 루프가 끝나면 모든 Category 개체는 budget == new_category_budget[-1] 또는 마지막 예산 항목이어야합니다.

Category 개체마다 다른 값을 원할 경우 save을 개별적으로 호출해야합니다.

관련 문제