Carsten ,
Thanks for your reply,
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.
The entry in the database is the same - apart from the last_updated flag if
it's not rewritten over the top of it. This means I can check for new data
often and be alerted when there is an actual update (i.e. a change to the
data). If it rewrites the data everytime it checks then I have no idea
when data was actually updated.
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 checked by seeing that the last_updated field in the database was updated
everytime. (I suppose the issue could be with how that field gets reset to
the next time it's run- I didnt)
On Thursday, 5 November 2015 20:05:39 UTC, Carsten Fuchs wrote:
>
> 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 [email protected].
To post to this group, send email to [email protected].
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/45a2e51e-d7bb-4743-aa4c-c23b17098d17%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.