Django редактирует строки вместо добавления новой - PullRequest
1 голос
/ 27 февраля 2020

Есть ли причина, по которой такой код будет редактировать единственную строку из таблицы вместо создания новой?

newStudent = Student(name=var.name,
                     mark=var.mark,
                     year=newyear)
newStudent.save()

Объяснение:

Я работаю с записями студентов. Это представление вызывается, когда я обновляю информацию ученика. var.name - это имя студента до редактирования, а var.mark - его отметка до редактирования. newyear - это год, для которого я добавляю эту информацию.

Это представление вызывается каждый год (т. Е. У ученика новое имя и отметка каждый год). После этих строк я продолжаю редактировать информацию о текущем году учащегося.

Проблема:

Этот код редактирует единственную строку из таблицы Student в базе данных вместо добавления новой.

Ответы [ 3 ]

2 голосов
/ 27 февраля 2020

Если вы хотите создать объект, используйте для его создания методы менеджера моделей django, например:

Student.objects.create(name=var.name, mark=var.mark, year=newyear)

Это обеспечит создание явно вместо выборки строк с существующими значениями.

1 голос
/ 27 февраля 2020

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

student =  Student(name=var.name,
                     mark=var.mark,
                     year=newyear) 
student.save() # this means create new object



student =  Student(pk=existed_pk,name=var.name,
                     mark=var.mark,
                     year=newyear) 
student.save() # this means update student record which has existed_pk pk
0 голосов
/ 27 февраля 2020

Вы можете использовать метод update_or_create, удобный метод для обновления вашего объекта с заданным именем, создания нового при необходимости. По умолчанию это словарь пар (поле, значение), используемых для обновления объекта.

 obj, created = Student.objects.update_or_create(name=var.name, defaults={mark=var.mark, year=newyear})

Возвращает кортеж (объект, созданный), где объект - это созданный или обновленный объект, а созданный логический тип, указывающий, был ли создан новый объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...