Django: Как мне обновить только одну запись в моей базе данных? - PullRequest
0 голосов
/ 27 сентября 2019

У меня много проблем при попытке обновить один (запись) объект в моей базе данных.

context['eval_list'] = Evaluering.objects.update(eval_relationer_id=self.kwargs.get('pk'))

Я использую objects.update, но он обновляет ВСЕ мои объекты fk.Как мне добиться обновления только одного объекта?Я также пробовал это:

context['eval_list'] = Evaluering.objects.update_or_create(eval_relationer_id=self.kwargs.get('pk'))

Но это создает новый объект и не обновляет запись, которую я хочу обновить.Я знаю, почему он создает новые объекты, и это потому, что FK, который я пытаюсь обновить, является нулевым.Наверняка, должен быть способ только обновлять, а не создавать единственную запись?Что мне здесь не хватает?

Я пытался добавить фильтр, но он кажется избыточным?Я попробовал это:

context['eval_list'] = Evaluering.objects.filter(eval_relationer_id=self.kwargs.get('pk')).update(eval_relationer_id=self.kwargs.get('pk'))

Я действительно пытался создать идентификатор FK мгновенно, а не позже, но я не мог заставить его работать, но если я создал идентификатор, то update_or_createбудет работать, потому что идентификатор уже существует, НО я не могу поверить, что я не могу обновить один объект без создания?

Если создание идентификатора ранее было единственной возможностью, я должен выяснить, как это сделать.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

После помощи @Hanny я понял, что идет не так.

Я пытался отфильтровать по eval_relationer_id, когда я должен был фильтровать по pk оценки и получить этот конкретный PK.В противном случае я буду обновлять ВСЕ значения, что не то, что я хотел.

Итак, фильтруя по pk:

filter(pk=self.kwargs.get('pk'))

И обновляя по атрибуту / fk, который я хочу обновить

update(eval_relationer_id=self.kwargs.get('pk'))

Это конечный результат:

context['eval_list'] = Evaluering.objects.filter(pk=self.kwargs.get('pk')).update(eval_relationer_id=self.kwargs.get('pk'))
0 голосов
/ 27 сентября 2019

MyModel.objects.filter(pk=some_value).update(field1='some value')

Фильтр получает ваш объект (возвращает Queryset только с этим объектом), затем обновление изменяет другое поле, которое не является PK, на то, что вы хотите.

В вашем случае, вероятно, что-то вроде этого:

context['eval_list'] = Evaluering.objects.filter(eval_relationer_id=self.kwargs.get('pk')).update(some_attribute='some value')
...