Stworzyłem system zatwierdzenia dla mojego projektu. Mam kilku użytkowników. Użytkownicy tymi są analitykiem, prowadzącym, menedżerem itp. Mam tabelę limitu kredytowego (DoaTable) w moim systemie. Chcę, gdy użytkownik lead aktualizuje pole w tej tabeli, nie powinno być akceptowane, dopóki menedżer tego nie zatwierdzi.

Tak więc, stara wartość powinna być ważna do manager zatwierdza nowe wartości, a gdy menedżer zatwierdzi go nowa wartość powinna zostać zaakceptowana.

Stworzyłem nowy model. Gdy wiodący chce zaktualizować tę tabelę, dane zapisują drugi model (tabela) o nazwie DoaTableBeforeApproval. W ten sposób, gdy menedżer zatwierdził tabelę, którą aktualizacja ołowiu, doatykowana powinna być równa nowej tabeli (DoatbleBePreAvanoval). Jak mogę stworzyć pętlę do tej równości?

models.py

LIMITS = (
        ('Low Risk', 'Low Risk'),
        ('Medium Risk', 'Medium Risk'),
        ..'),
        ('Strict Credit Check', 'Strict Credit Check'),
        ('No Credit Check', 'No Credit Check'),
    )

RANKS = (
        ('Analyst', 'Analyst'),
        ('Senior Analyst', 'Senior Analyst'),
        ('Lead', 'Lead'),
        ('Manager', 'Manager'),
        ...
    )


class DoaTable(models.Model):

    rank = models.CharField(max_length=200, choices=RANKS)
    risk = models.CharField(max_length=200, choices=LIMITS)
    limit = models.FloatField()
    comp_name = models.ForeignKey(CompanyProfile, on_delete=models.CASCADE, null=True)


class DoaTableBeforeApproval(models.Model):

    rank = models.CharField(max_length=200, choices=RANKS)
    risk = models.CharField(max_length=200, choices=LIMITS)
    limit = models.FloatField()
    comp_name = models.ForeignKey(CompanyProfile, on_delete=models.CASCADE, null=True)

views.py

# To jest dla przewodów

def update_limit_before_approval(request, id):
    limiting = get_object_or_404(DoaTableBeforeApproval, id=id)
    form = UpdateDoaTableFormForApproval(request.POST or None, request.FILES or None, instance=limiting)
    limiting_item = DoaTable.objects.filter(id=id)

    if form.is_valid():
        update_form = form.save(commit=False)
        update_form.save()
        return redirect('approvals:update_limit_list')

    context = {
        'form': form,
        'limiting_item': limiting_item,
    }

    return render(request, 'limitUpdate.html', context)

# To dla menedżerów

def update_limit_by_manager(request):
    limit = get_object_or_404(DoaApprove)
    current_user = request.user
    userP = UserProfile.objects.get_or_create(username=current_user)
    form = DoaTableApproval(request.POST or None, request.FILES or None, instance=limit)
    limiting_item = DoaTable.objects.filter(comp_name=userP[0].company)

    doa = DoaTable.objects.filter(comp_name=userP[0].company)
    doa_new = DoaTableBeforeApproval.objects.filter(comp_name=userP[0].company)

    if form.is_valid():
        if form.approved:
              *******************
              **some loops here**
              *for doa = doa_new*
              *******************
        form.save()

        return redirect('approvals:update_limit_list')

    context = {
        'form': form,
        'limiting_item': limiting_item
    }

    return render(request, 'limitApprove.html', context)

forms.py

class DoaTableApproval(forms.ModelForm):
    approved = forms.TypedChoiceField(
        coerce=lambda x: x == 'True',
        choices=((False, 'Disapproved, review again'), (True, 'I confirm')),
        widget=forms.RadioSelect
    )

    class Meta:
        model = DoaApprove
        fields = ('approved',)
0
edece 15 marzec 2021, 10:18

1 odpowiedź

Najlepsza odpowiedź

Możesz przypisać wszystkie wartości jeden o jeden taki jak poniżej:

doa.rank = doa_new.rank
doa.risk = doa_new.risk
doa.limit = doa_new.limit
doa.comp_name = doa_new.comp_name
doa.save()

Albo możesz użyć Ta odpowiedź.

1
Halim Görkem Gülmez 19 marzec 2021, 12:41