Поле обновления Django, использующее форму в отношениях «многие ко многим» - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть две модели во многих отношениях.Я хочу использовать форму для обновления полей, форма имеет выпадающий список, когда авторизаторы имеют возможность отклонить или одобрить отпуск.как только отпуск был одобрен, я хочу иметь возможность настроить Leave_current_balance.Тем не менее, я получаю сообщение об ошибке: объект «float» не имеет атрибута «save» из строки кода current_balance.save ()

def unitDirectorForm(request,id):
    if request.method=='POST':
     
        getstaffid=NewLeave.objects.get(id=id)
        form = DirectorForm(request.POST, instance=getstaffid)
        if form.is_valid():
            form.save()
            total_days = getstaffid.Total_working_days
            current_balance = getstaffid.user.leave_balance.Leave_current_balance
            diff_balance = current_balance - total_days
            current_balance = diff_balance
            current_balance.save()
            return HttpResponse('You have successfuly Authorise the leave')

    else:
        
        form=DirectorForm()
        balance_form = leavebbalanceForm()

    return render(request,'managerauthorisedform.html',{'form':form})
    
                                                  
    
class LeaveBalance(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True,)
    Leave_current_balance= models.FloatField(null=True, blank=True, default=None)
    Year=models.CharField(max_length=100,default='')
    def __unicode__(self):
             return  self.Year


class NewLeave(models.Model):
      user=models.ForeignKey(User,default='',on_delete=models.CASCADE)
   leave_balance=models.ManyToManyField(Leave_Balance)
    Leave_type=models.CharField(max_length=100,blank=False,default='')
    Total_working_days=models.FloatField(null=True,  blank=False)
    leave=(
        ('annual','annual'),
        ('sick','sick'),

    )

  Leave_type=models.CharField(max_length=100,choices=leave,blank=False,default='')
    def __unicode__(self):
        return  self.Leave_type

class DirectorForm(forms.ModelForm):
    class Meta:
        model=NewLeave
        fields=('Director_Authorization_Status','Authorized_by_Director','Date_Authorized',)
        widgets={
            'Date_Authorized':DateInput()
        }

1 Ответ

0 голосов
/ 13 февраля 2019

Итак, во-первых, я не знаю, как выглядит ваш form, но я собираюсь догадаться.Прежде всего, ваша ошибка возникает из-за того, что вы пытаетесь вызвать функцию save для переменной типа float.Вы должны сохранять форму, а не число.Вам необходимо выполнить все вычисления от строки total_days... до current_balance = diff... до вызова form.save().После завершения этих вычислений вы должны присвоить current_balance значению form.fields['Leave_current_balance'], а затем сохранить форму.

...