2016-10-17 2 views
0

Ich habe ein Modellabhängiges Feld von anderen in django Admin

class Essai_Fluage(models.Model): 
    name = models.ForeignKey(Material, verbose_name=_('name')) 
    elongation= models.FloatField(_('allongement'),blank=True, null=False) 
    t_02 = models.IntegerField(_('t_0.2%'),blank=True, null=False) 
    t_05 = models.IntegerField(_('t_0.5%'),blank=True, null=False) 
    t_075 = models.IntegerField(_('t_0.75%'),blank=True, null=False) 
    tr = models.IntegerField(_('tr'),blank=True, null=False) 
    T= models.FloatField(_('temperature'),blank=True, null=False) 
    sigma = models.FloatField(_('contrainte'),blank=True, null=False) 
    PLM = models.FloatField(_('PLM'),blank=True, null=False) 
    rep = models.IntegerField(_('indice'),blank=True, null=True) 

    def __unicode__(self): 
     return '%s' % (self.name) 

    class Meta: 
     verbose_name = _('creep test') 
     verbose_name_plural = _('creep test') 

    ordering = ['rep',] 

Ich mag das Feld PLM mit der Formel PLM = (T/1000) * (20 + log10 (tr)) berechnen lassen

T und tr sind die Felder

T= models.FloatField(_('temperature'),blank=True, null=False) 
tr = models.IntegerField(_('tr'),blank=True, null=False) 

im Admin ist es möglich, dies zu tun?

+0

Haben Sie tatsächlich PLM in der Datenbank speichern müssen, oder es kann je nach Bedarf berechnet werden? –

+0

Ja, ich muss das Ergebnis der Berechnung in der Datenbank speichern – Patrice

Antwort

0

Sie können die Speichermethode des Modells überschreiben, um den Wert aus der Formel zu berechnen.

Versuchen Sie folgendes:

class Essai_Fluage(models.Model): 
     name = models.ForeignKey(Material, verbose_name=_('name')) 
     elongation= models.FloatField(_('allongement'),blank=True, null=False) 
     t_02 = models.IntegerField(_('t_0.2%'),blank=True, null=False) 
     t_05 = models.IntegerField(_('t_0.5%'),blank=True, null=False) 
     t_075 = models.IntegerField(_('t_0.75%'),blank=True, null=False) 
     tr = models.IntegerField(_('tr'),blank=True, null=False) 
     T= models.FloatField(_('temperature'),blank=True, null=False) 
     sigma = models.FloatField(_('contrainte'),blank=True, null=False) 
     PLM = models.FloatField(_('PLM'),blank=True, null=False) 
     rep = models.IntegerField(_('indice'),blank=True, null=True) 

     def __unicode__(self): 
      return '%s' % (self.name) 

     class Meta: 
      verbose_name = _('creep test') 
      verbose_name_plural = _('creep test') 

     ordering = ['rep',] 

     def save(self, *args, **kwargs): 
      if self.PLM is not None: 
       self.PLM = (self.T/1000)*(20 + log10(self.tr)) 
       super(Essai_Fluage, self).save(*args, **kwargs) 
Verwandte Themen