Friday, October 1, 2010

Re: A better way of checking if a record exists

... what is the infamous obj.__dict__.update() hack?

On Oct 1, 11:57 am, bruno desthuilliers
<bruno.desthuilli...@gmail.com> wrote:
> On 1 oct, 10:29, Shawn Milochik <sh...@milochik.com> wrote:
>
>
>
> > For what it's worth, I use the get_or_create with the 'default' keyword to do this:
>
> > for record in reader:
>
> >     new_values = {
> >         'product_code': slugify(record['Product Code']),
> >         'msrp': record['Suggested Retail'],
> >         #etc...
> >     }
>
> >     product, was_created = Product.objects.get_or_create(source_id = record['Source ID'], defaults = new_values)
>
> >     if not was_created:
> >         product.product_code = slugify(record['Product Code'])
> >         product.msrp = record['Suggested Retail']
> >         #etc...
>
> Err... What about:
>
>     if not was_created:
>         for attrname, value in new_values.items():
>             setattr(product, attrname, value)
>         product.save()
>
> > I don't like the DRY violation, but a model instance doesn't have an update() method like a queryset for me to dump the kwargs into -- unless I'm missing something.
>
> For "direct" model fields you could use the infamous
> obj.__dict.__.update() hack but it's dirty and brittle - and it still
> won't work with foreign keys, m2ms etc.
>
> Now nothing prevents you from providing this model.update method...

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.

No comments:

Post a Comment