Вызовы моделей delete () и deserialized_object.save () не работают при последовательном вызове - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь импортировать json в мое веб-приложение django, и оно почти нормально работает, за исключением одной проблемы.Когда я удаляю объекты на 1-2 строки перед вызовом deserialized_object.save (), он работает нормально, но если я последовательно вызываю delete (), а затем последовательно сохраняю (), он не работает должным образом.

ЭТО РАБОТАЕТ КАЧЕСТВЕННО

def builder_import(request, pk):
    if request.method == 'POST':
        file = request.FILES['myfile']
        data = file.read()
        ModelOne.objects.filter(linked__name__pk=pk).delete()
        for deserialized_object in serializers.deserialize("json", data):
            if object_should_be_saved(deserialized_object):
                deserialized_object.save()

ЭТО НЕ РАБОТАЕТ

def builder_import(request, pk):
  if request.method == 'POST':
    file = request.FILES['myfile']
    data = file.read()
    for deserialized_object in serializers.deserialize("json", data):
      if object_should_be_saved(deserialized_object):
        ModelOne.objects.filter(linked__name__pk=pk).delete()
        deserialized_object.save()

Первый фрагмент работает нормально, а второй - нет.В первом случае он удаляет все записи, а затем загружает все правильно в БД.Но во втором случае он удаляет, а затем загружает только одну запись по какой-то странной причине.

Может быть, это какая-то проблема с синхронизацией, но я думал, что операции с базой данных django хорошо синхронизированы.

Что может быть не так?(Я следовал следующему руководству по сериализации https://docs.djangoproject.com/en/1.11/topics/serialization) (отредактировано)

1 Ответ

0 голосов
/ 23 мая 2019

Как прокомментировано выше:

Каждая итерация добавляет одну запись, следующая итерация удаляет ее, а затем добавляет еще одну. В конце концов у вас есть одна созданная запись. PK остается неизменным в каждой итерации, поэтому повторное удаление снова и снова не выглядит как хороший дизайн.

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