'模式'对象没有属性'更新'

时间:2017-07-06 10:45:35

标签: django

我试图创建一个新功能,但我收到了这个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更新它。

1 个答案:

答案 0 :(得分:4)

您可以尝试使用update_fields

PointsConsommes = SocieteIntervention.objects.latest('id')
PointsConsommes.PointsConsommes = Consomme
PointsConsommes.save(update_fields=['PointsConsommes'])
相关问题