Создать модель Django или обновить, если она существует



Я хочу создать объект модели, например Person, если идентификатор человека не существует, или я получу этот объект person.



код для создания нового человека следующим образом:



class Person(models.Model):
identifier = models.CharField(max_length = 10)
name = models.CharField(max_length = 20)
objects = PersonManager()

class PersonManager(models.Manager):
def create_person(self, identifier):
person = self.create(identifier = identifier)
return person


но я не знаю, где проверить и получить существующий объект person.

661   5  

5 ответов:

Если вы ищете" обновление, если существует еще создать " прецедент, пожалуйста, обратитесь к @Zags отличный ответ


Джанго уже есть get_or_create, https://docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create

для вас это может быть :

id = 'some identifier'
person, created = Person.objects.get_or_create(identifier=id)

if created:
   # means you have created a new person
else:
   # person just refers to the existing one

неясно, задает ли ваш вопрос get_or_create метод (доступный по крайней мере от Django 1.3) или update_or_create способ (новый в Django 1.7). Это зависит от того, как вы хотите обновить объект пользователя.

пример использования выглядит следующим образом:

# In both cases, the call will get a person object with matching
# identifier or create one if none exists; if a person is created,
# it will be created with name equal to the value in `name`.

# In this case, if the Person already exists, its existing name is preserved
person, created = Person.objects.get_or_create(
        identifier=identifier, defaults={"name": name}
)

# In this case, if the Person already exists, its name is updated
person, created = Person.objects.update_or_create(
        identifier=identifier, defaults={"name": name}
)

Django имеет поддержку для этого, проверьте get_or_create

person, created = Person.objects.get_or_create(name='abc')
if created:
    # A new person object created
else:
    # person object already exists

думал, что я добавлю ответ, так как ваш заголовок вопроса выглядит так, как будто он спрашивает, как создать или обновить, а не получить или создать, как описано в теле вопроса.

Если вы хотите создать или обновить объект .метод save () уже имеет такое поведение по умолчанию, начиная с документы:

Django абстрагирует необходимость использования инструкций INSERT или UPDATE SQL. В частности, когда вы вызываете save (), Django следует этому алгоритму:

Если атрибут первичного ключа объекта имеет значение, которое вычисляет в True (т. е. значение, отличное от None или пустой строки), Django выполняет обновление. Если атрибут первичного ключа объекта не задан или если обновление ничего не обновило, Django выполняет вставку.

стоит отметить, что когда они говорят "если обновление ничего не обновило", они по существу ссылаются на случай, когда идентификатор, который вы дали объекту, еще не существует база данных.

Если один из входных данных при создании является первичным ключом, этого будет достаточно:

Person.objects.get_or_create(id=1)

он будет автоматически обновляться, если существует, так как два данных с одним и тем же первичным ключом не допускается.

Comments

    Ничего не найдено.