Reputation: 11540
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
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
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