Django's Model.save() modifies undesired columns
<p>Recently I've found that Django ORM's <code>Model.save()</code> executes an SQL to update 'ALL' columns by default, even if nothing has been modified. 
This really concerns me, because any changes I made has a chance to be set back to the original value by some other <code>Model.save()</code> process.</p>

<p>For example, I have a model <code>Order</code>. And there are two concurrent processes (P1, P2) working on it. First of all, P1 selects a row:</p>

<pre><code># P1
order = Order.objects.get(pk=10000)
</code></pre>

<p>Then, P2 selects the same row and updates the <code>status</code> column: (the following statements can be wrapped in a transaction, or even a SERIALIZABLE one, but this can not solve the issue.)</p>

<pre><code># P2
order = Order.objects.get(pk=10000)
if order.status == UNPAID:
    order.status = PAID    # update the `status` column
    order.save()
</code></pre>

<p>After that, P1 updates some other trivial column:</p>

<pre><code># P1
order.xxx = xxx    # update some other trivial column
order.save()    # This would set the `status` back to UNPAID !!!
</code></pre>

<p><code>order.status</code> would be set back to <code>UNPAID</code>, and that is NOT what I want.</p>

<p>I know I can use <code>save(update_fields=...)</code>, <code>select_for_update()</code>, <code>filter(...).update(...)</code>, SERIALIZABLE transaction, or explicit locking on P1 to prevent this issue. 
But the thing is: It's ridiculous to use them on all <code>Model.save()</code> statements in the whole project. Furthermore, even if I do in my project code, there's some other code doing this (Django Admin, ModelForm...).</p>

<p>Should I rewrite <code>Model.save()</code> to update only those modified fields?</p>

<p>(It seems like a severe problem to me. Or have I taken something wrong?)</p>