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

--
You received this message because you are subscribed to the Google Groups "Django 
users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/563BB657.7050209%40cafu.de.
For more options, visit https://groups.google.com/d/optout.

Reply via email to