Как управлять потерянным подключением при обновлении базы данных? - PullRequest
0 голосов
/ 14 января 2020

Я разрабатываю проект Django с приложением рандомизации для клинических испытаний.

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

Мой «страх» теряется при подключении к inte rnet во время рандомизации и особенно при обновлении таблиц.

Какая практика полезна для управления этими случаями?

Я должен быть уверен, что все 3 таблицы обновлены.

До сих пор, когда пользователь перенаправляется на страницу подтверждения, это означает, что весь процесс завершен. Но если inte rnet соединение потеряно во время отправки форм randomization_edit, это не будет иметь место ...

Спасибо за советы.

views.py

@login_required
@permission_required('randomization.can_randomize')
def randomisation_edit(request):

    if request.method == "POST":
        form = RandomisationForm(request, data=request.POST or None)
        if form.is_valid():
            randomisation = form.save()
            # randomisation
            rand = Randomiser(randomisation.ran_num, request.session.get('selected_site'),randomisation.ran_vih, randomisation.ran_sta) # rand = Randomiser(randomisation.ran_num, randomisation.ran_vih, randomisation.ran_sta)

            # Mise à jour de la base de données -> Patient code pour rendre indisponible la ligne
            # pour une prochaine randomisation

            # ListeRandomisation
            # 1.Récupération de la ligne dans la liste de rando
            bras = rand['bras']

            # 2.Mise à jour de la ligne dans la liste de rando
            patient = ListeRandomisation.objects.get(ran_ide = bras)
            patient.pat = randomisation.ran_num # pat
            patient.save()

            # Medicament
            # 1.Récupération de la ligne dans la liste de correspondance médicament
            medicament = rand['medicament']

            # 2.Mise à jour de la ligne dans la liste de correspondance médicament
            medicament = Medicament.objects.get(med_ide = medicament)
            medicament.pat = randomisation.ran_num # pat
            medicament.save()

            # mise à jour de la variable de session can_randomize 
            request.session['can_randomize'] = is_randomizable(medicament.pat[0:3], request.session.get('selected_site')) # request.session['can_randomize'] = is_randomizable(medicament.ran_dis)

            # Mise à jour de la table Randomisation avec le bras et le numéro de boite attribués
            randomisation.ran_bra = patient.ran_bra
            randomisation.ran_med = medicament.med_num
            randomisation.ran_log_dat = datetime.now()
            randomisation.ran_log = request.user.username
            randomisation.ran_log_sit = request.session['selected_site'] # gestion des patients pré-inclus dans un site et randomisé dans un autre centre
            randomisation.save()

            return redirect('randomization:confirmation', pk = randomisation.pk)

    else:
        form = RandomisationForm(request)

    return render(request, 'randomization/randomisation_edit.html', {'form': form})

@login_required
def confirmation(request, pk):

    # Vérifier si l'utilisateur vient de cette page (gestion du retour arrière via la fleche navigateur)
    request.session['visited'] = True
    # print(request.session.get('visited'))
    # Récupération des informations à afficher sur le formulaire de confirmation
    randomization = Randomisation.objects.get(pk = pk)
    pat = randomization.ran_num
    sta = randomization.ran_vih
    sev = randomization.ran_sta
    medicament = Medicament.objects.get(med_num = randomization.ran_med) # récupération de l'identifiant ligne correspondant au code lot

    # envoie d'un email de confirmation
    if randomization.ran_bra == 1 or randomization.ran_bra == 2:
        strategie = 1 # 'WHO Standard TBM treatment'
    else:
        strategie = 2 # 'Intensified TBM treatment'
    email('randomisation',pat,strategie,medicament.med_num,'')

    return render(request, 'randomization/confirmation.html', {'randomization': randomization,'medicament': medicament})

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