Rahul
Rahul

Reputation: 11540

update fields of created object django in one go

I am trying to update the get_or_create object. I don't know if there is any simple way.

myapp/models.py

from django.db import models


class MyModel(models.Model):
    code = models.CharField(max_len=5)
    valid = models.BooleanField(default=True)
    relevant = models.BooleanField(default=True)
    use = models.CharField(max_len=10)
    date = models.DateField('date', null=True, blank=True)

myapp\management\commands_my_command.py

from myapp import MyModel


my_obj_defaults = {'valid': False, 'relevant': False, 'use': 'useless'}
my_obj, created = MyModel.get_or_create(code=mycode, defaults=my_obj_defaults)

if created:
    my_obj.save()
else:
    my_obj.update(**my_obj_defaults)

It is giving AttributeError: 'MyModel' object has no attribute 'update'

Upvotes: 0

Views: 37

Answers (2)

Iain Shelvington
Iain Shelvington

Reputation: 32244

update_or_create takes an argument defaults and will set those values on an existing record or on a created record. This is I think what you are trying to replicate?

my_obj_defaults = {'valid': False, 'relevant': False, 'use': 'useless'}
my_obj, created = MyModel.objects.update_or_create(code=mycode, defaults=my_obj_defaults)

Upvotes: 1

Moha369
Moha369

Reputation: 834

Another solution:

my_obj_defaults = {'valid': False, 'relevant': False, 'use': 'useless'}
my_obj, created = MyModel.get_or_create(code=mycode)
for k, v in my_obj_defaults:
    setattr(my_obj, k, v)

Upvotes: 0

Related Questions