2016-06-04 2 views
1

Я модель: -Джанго - update_or_create

class XYZ(models.Model): 
    unique_col = models.CharField(max_length=255) 
    total = models.IntegerField() 

Я хочу, чтобы обновить общее, учитывая значение unique_col по +10. Таким образом, я делаю следующее: -

try: 
    obj = XYZ.objects.get(unique_col='unique_value') 
    obj.total +=10 
except: 
    obj = XYZ(unique_col='unique_value', total=10) 
finally: 
    obj.save() 

Как я могу обновить total до +10 предыдущего значения, используя update_or_create в этом случае?

ответ

4

Проблема в том, что вы не знаете значения total, если update_or_create необходимо создать объект. Если указать значение по умолчанию, как так

class XYZ(models.Model): 
    unique_col = models.CharField(max_length=255) 
    total = models.IntegerField(default=0) 

Затем вы можете запустить get_or_create и сделать обновление позже.

obj = XYZ.objects.get_or_create(unique_col='unique_value') 
obj.total += 10 
obj.save() 

Конечно это не использовать метод update_or_create, если бы вы действительно хотели бы использовать, но это по крайней мере получает вас из нуждаясь в Try/за исключением, если это то, что вы надеялись избежать

+1

Значение по умолчанию должно быть 0, иначе после создания оно будет содержать значение 20 – Zoli

+0

Хорошо, спасибо! Редактирование ответа, чтобы отразить это –

Смежные вопросы