2017-07-06 64 views
1

我試圖創建一個新的功能,但我發現這個錯誤的Django:「模型」對象有沒有屬性「更新」

「SocieteIntervention」對象有沒有屬性「更新」

我在我的應用程序的幾種模式:

class Societe(models.Model): 

    Nom = models.CharField(null= False, max_length=30, verbose_name='Nom de Société') 
    Etat = models.CharField(max_length = 30, choices = CHOIX_ETAT_SOCIETE, null=False, verbose_name="Etat") 
    Adresse = models.CharField(max_length=30, verbose_name='Adresse') 
    Ville = models.CharField(max_length=30, verbose_name='Ville') 
    Zip = models.IntegerField(verbose_name='Code Postal') 
    Region = models.CharField(max_length=30, verbose_name='Région') 
    Pays = CountryField(blank_label='Sélectionner un pays', verbose_name='Pays') 
    Mail = models.CharField(max_length=40, verbose_name='Email') 
    Web = models.CharField(max_length=40, verbose_name='Site Web') 
    Telephone = models.CharField(max_length=20, verbose_name='Téléphone Fixe') 
    Fax = models.CharField(max_length=20, verbose_name='Fax') 
    SIREN = models.BigIntegerField(verbose_name='N° SIREN') 
    SIRET = models.BigIntegerField(verbose_name='N° SIRET') 
    NAF_APE = models.CharField(max_length=5, verbose_name='Code NAF-APE') 
    RCS = models.CharField(max_length = 30, verbose_name='Code RCS') 
    CHOIX_TVA = models.CharField(max_length = 30, choices=CHOIX_TVA, verbose_name='Assujeti à la TVA') 
    TVA = models.CharField(max_length=13, verbose_name='N° TVA Intracommunautaire') 
    Type = models.CharField(max_length = 30, choices = CHOIX_SOCIETE, verbose_name = 'Type de Société') 
    Effectif = models.CharField(max_length = 30, choices = CHOIX_EFFECTIF, verbose_name = 'Effectif') 
    Capital = models.IntegerField(verbose_name = 'Capital de la Société (euros)') 
    Creation = models.DateTimeField(auto_now_add=True) 
    InformationsInstitution = models.CharField(max_length=30, null=False, verbose_name='Informations Institution') 
    Utilisateur = models.CharField(max_length=100, null=False, verbose_name="Utilisateur", default=" ") 

    def save(self, *args, **kwargs): 
     for field_name in ['Nom', 'Ville', 'Region']: 
      val = getattr(self, field_name, False) 
      if val: 
       setattr(self, field_name, val.upper()) 

     super(Societe, self).save(*args, **kwargs) 

class SocieteContrat(models.Model): 

    Societe = models.ForeignKey(Societe, related_name="Societe", verbose_name="Société") 
    PointsTotal = models.FloatField(verbose_name="Nombre points total") 
    PointsRestant = models.FloatField(verbose_name="Nombre points restants", null=True) 

    def __unicode__(self): 
     return unicode (self.id, self.Societe, self.PointsTotal, self.PointsRestant) 

class SocieteIntervention(models.Model): 

    Societe = models.ForeignKey(Societe, related_name="Societe1", verbose_name="Société") 
    Date = models.DateField(verbose_name="Date de l'Intervention") 
    Temps = models.IntegerField(verbose_name="Durée Intervention (min)") 
    Description = models.CharField(max_length=200, verbose_name="Description") 
    Niveau = models.CharField(max_length = 30, choices = CHOIX_NIVEAU, verbose_name = 'Niveau Intervention/Intervenant') 
    PointsConsommes = models.FloatField(verbose_name=u"Nombre points consommés", null=True) 


class CoefficientIntervention(models.Model): 

    Technicien = models.FloatField(verbose_name="Coefficient Technicien") 
    Ingenieur = models.FloatField(verbose_name="Coefficient Ingénieur") 
    Consultant = models.FloatField(verbose_name="Coefficient Consultant") 
    Architecte = models.FloatField(verbose_name="Coefficient Architecte") 

    def __unicode__(self): 
     return unicode (self.id, self.Technicien, self.Ingenieur, self.Consultant, self.Architecte) 

我的目標是:與一些點的創建服務合同秒。積分按係數扣除。這個係數取決於你的狀態:技術員,工程師,...

我創造,我認爲這樣的功能:

@login_required 
def Identity_Contrat(request, id) : 

    societe = get_object_or_404(Societe, pk=id) 
    contrat = get_object_or_404(SocieteContrat, pk=id) 
    coefficient = CoefficientIntervention.objects.last() 

    if request.method == 'POST': 

     form = InterventionFormulaire(request.POST or None) 

     if form.is_valid() : 
      post = form.save() 

      Liste_Intervention = SocieteIntervention.objects.filter(Societe__id=id).values_list("Temps") 
      Value = Liste_Intervention.last()[0] 

      Type_Intervention = SocieteIntervention.objects.filter(Societe__id=id).values_list("Niveau") 

      if Type_Intervention.last() == (u'Ing\xe9nieur',) : 
       Consomme = Value * coefficient.Ingenieur 

      elif Type_Intervention.last() == ('Technicien',) : 
       Consomme = Value * coefficient.Technicien 

      elif Type_Intervention.last() == ('Consultant',) : 
       Consomme = Value * coefficient.Consultant 

      elif Type_Intervention.last() == ('Architecte',) : 
       Consomme = Value * coefficient.Architecte 

      PointsConsommes = SocieteIntervention.objects.latest('id').update(PointsConsommes=Consomme) 

      messages.success(request, 'Le formulaire a été enregistré !') 
      return HttpResponseRedirect('http://localhost:8000/Identity/Contrat/Societe/'+id) 

     else: 
      messages.error(request, "Le formulaire est invalide !") 

    else: 
     form = InterventionFormulaire() 



    context = { 
     "coefficient" : coefficient, 
     "societe" : societe, 
     "contrat" : contrat, 
     "form" : form, 
    } 

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

我填寫表格,我保存它PointsConsommes == NULL,然後我試圖用之前計算的值更新它。

如何在表單保存時更新字段PointsConsommes?我不克服用.update來更新它。

回答

4

你可以嘗試使用update_fields

PointsConsommes = SocieteIntervention.objects.latest('id') 
PointsConsommes.PointsConsommes = Consomme 
PointsConsommes.save(update_fields=['PointsConsommes']) 
+0

謝謝!我以前用'update_fields'嘗試過,但我沒有任何效果:/所以也許我沒有很好地嘗試這個功能。無論如何,非常感謝! – Deadpool

相關問題