Hi Yunti,
Am 05.11.2015 um 18:19 schrieb Yunti:
> I have tried to use the update_or_create() method assuming that it would either, create
> a new entry in the db if it found none or update an existing one if it found one and had
> differences to the defaults passed in - or wouldn't update if there was no difference.
A note about the last statement: If a Supplier object has the same unique_id, and all
other fields (in `defaults`) are the same as well, logically there is no difference
between updating and not updating – the result is the same.
> However it just seemed to recreate entries each time even if there were no changes.
Have you checked? How?
In your create_or_update_if_diff() you seem to try to re-invent update_or_create(), but
have you actually examined the results of the
supplier, created = Supplier.objects.update_or_create(...)
call?
> I think the issue was that I wanted to:
> 1) get an entry if all fields were the same,
update_or_create() updates an object with the given kwargs, the match is not made
against *all* fields (i.e. for the match the fields in `defaults` are not accounted for).
> 2) or create a new entry if it didn't find an existing entry with the unique_id
> 3) or if there was an entry with the same unique_id, update that entry with remaining
> fields.
update_or_create() should achieve this. It's hard to tell more without additional
information, but
https://docs.djangoproject.com/en/1.8/ref/models/querysets/#update-or-create explains
the function well, including how it works. If you work through this in small steps,
check examples and their (intermediate) results, you should be able to find what the
original problem was.
Best regards,
Carsten