У меня проблема с удалением объектов. Я написал метод удаления, который получает список идентификаторов объектов, которые нужно удалить. Это отлично работает для объектов и объектов с внешними ключами, но это не удается, если у меня есть отношение OneToOneField к объекту, который я хочу удалить.Проблема с удалением django - удаление нескольких объектов с помощью отношения OneToOneField - получено MultipleObjectsReturned error
Это мой метод удаления:
@login_required
def delete_objects(request, model, selected_ids):
'''
capsulate a bulk delete method
delete all objects found for the given model
fails silently since model.delete() always fails silently
'''
object_list = model.objects.filter(pk__in=selected_ids)
count = object_list.count()
if count == 1:
name = model._meta.verbose_name.title()
else:
name = model._meta.verbose_name_plural.title()
object_list.delete()
request.user.message_set.create(message='Successfully deleted %s %s' % (count,name))
return
До сих пор я просто проверял, контактирующие с объектами. Теперь я добавил модель PhoneNumber для своих моделей. Модель PhoneNumber имеет отношение OneToOneField к модели Contact. Если объекту ContactNumber не присвоен объект PhoneNumber или один объект PhoneNumber, я могу его удалить. Но если я связываю более одного объекта PhoneNumber с объектом Contact, я получаю сообщение об ошибке.
Это сообщение об ошибке, что я получаю:
MultipleObjectsReturned at /crm/contacts/
get() returned more than one PhoneNumber -- it returned 3! Lookup parameters were {'contact__pk': 4L}
Request Method: POST
Request URL: http://127.0.0.1:8000/crm/contacts/
Exception Type: MultipleObjectsReturned
Exception Value:
get() returned more than one PhoneNumber -- it returned 3! Lookup parameters were {'contact__pk': 4L}
Я прочитал в Джанго документы
, что «любые объекты, которые имели внешние ключи, указывающие на объект, чтобы исключить будут удалены вместе с ним ». Это цель, которую я хочу выполнить, но теперь я получаю сообщение об ошибке. Все, что я хочу, это объекты, которые необходимо удалить: D
На самом деле это может быть проблема с дизайном? Неправильно ли, когда я связываю более одного объекта PhoneNumber с объектом Contact с отношением OneToOneField? Я выбрал OneToOneField, так как номер телефона уникален и должен быть связан только с одним контактом.
Взял слова прямо сбился мне рот :) – elo80ka
: D, который спас мой день. Он работает сейчас. Я неправильно понял отношения OneToOneField. Я просто хотел убедиться, что никакой другой Контакт не может относиться к одному и тому же объекту PhoneNumber. Но это отлично работает с ForeignKeys. OneToOne Отношения там, чтобы определить OneToOne Отношения, как название говорит нам ;-) Спасибо, ребята! –