обновить поля созданного объекта django в одном go - PullRequest
0 голосов
/ 05 января 2020

Я пытаюсь обновить объект get_or_create. Я не знаю, есть ли какой-нибудь простой способ.

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)

Даёт AttributeError: 'MyModel' object has no attribute 'update'

Ответы [ 2 ]

1 голос
/ 05 января 2020

update_or_create принимает аргумент defaults и устанавливает эти значения в существующей записи или в созданной записи. Это я думаю что вы пытаетесь повторить?

my_obj_defaults = {'valid': False, 'relevant': False, 'use': 'useless'}
my_obj, created = MyModel.objects.update_or_create(code=mycode, defaults=my_obj_defaults)
0 голосов
/ 05 января 2020

Другое решение:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...