Philippe Haumesser
Philippe Haumesser

Reputation: 647

model attribute in a template

I want to add attribute I add to my model from a model linked to another

this is my models:

class valuation(models.Model):
    stock = models.ForeignKey("stock",on_delete=models.CASCADE,related_name='valuation',)
    date = models.DateField(auto_now_add=True)
    val_type = models.CharField(choices=TYPE, max_length=1,default='R')
    user = models.ForeignKey("users.User", on_delete=models.CASCADE)
    decision = models.BooleanField(verbose_name="clicked if u invest?", default=False)

    def __str__(self):
        return f"{self.stock} - {self.date} - {self.val_type}"


    evolQuote = (
        (1, 'High'),
        (0, 'Undetermine'),
        (-1, 'Low'))
    class val_detail_Swing(models.Model):
            valuation = models.OneToOneField(valuation, on_delete=models.CASCADE)
            cycleMarket = models.IntegerField(choices=evolQuote, null=False, blank=False,default=0)
            news = models.IntegerField(choices=evolQuote,null=False, blank=False,default=0)
            managementPostion = models.IntegerField(choices=evolQuote,null=False, blank=False,default=0)
            short =models.IntegerField(choices=evolQuote,null=False, blank=False,default=0)
            BARCHART_analysts = models.IntegerField(choices=evolQuote, blank=True, verbose_name= "What BARCHAT says? ",default=0)
            TRADINGVIEW_analysts = models.IntegerField(choices=evolQuote, blank=True, verbose_name= "What TRADINGVIEW says? ",default=0)
            INVESTING_analysts = models.IntegerField(choices=evolQuote, blank=True,verbose_name= "What INVESTING says? ",default=0)
            parabolics = models.IntegerField(choices=evolQuote,null=False, blank=False,default=0)
            trix = models.IntegerField(choices=evolQuote,null=False, blank=False,default=0)
            arron = models.IntegerField(choices=evolQuote,null=False, blank=False,default=0)
            macd = models.IntegerField(choices=evolQuote,null=False, blank=False,default=0)
    
    def rates(self):
        marketRate = self.cycleMarket + self.news + self.managementPostion + self.short
        analystRate = self.BARCHART_analysts + self. TRADINGVIEW_analysts + self.INVESTING_analysts
        indicatorRate = self.parabolics + self.arron + self.macd
return marketRate, indicatorRate,analystRate

on my val_detail_swing model I add rates:

My view is :

class valuationDetailview(DetailView):
    template_name = "evaluation/evaluation_detail.html"
    queryset = valuation.objects.all()
    context_object_name = "valuation"

and my template begins with that :

div id="accordion">
  <div class="card">
    <div class="card-header" id="headingOne">
      <h5 class="mb-0">
        <button class="btn btn-link" data-toggle="collapse" data-target="#collapseOne" aria-expanded="false" aria-controls="collapseOne">
          <div class="row">
                      <div class="col">Market trend</div>
          <div class="center"><input class="speech-bubble" value="{{ valuation.val_detail_swing.rates.marketRate }}" id="marklRate" name="markRate"></div>
          </div>
        </button>
      </h5>
    </div>

the {{ valuation.val_detail_swing.rates.marketRate }} stays empty. I want in my detail view that It shows a value which is the sum of modelchoice values of my val_detail_Swing instance

Upvotes: 0

Views: 37

Answers (1)

AMG
AMG

Reputation: 1646

Your return from rates doesn't specify the marketRate as a named thing. Use a named tuple or {{ valuation.val_detail_swing.rates.0 }} (zero being the first position).

If you show just {{ valuation.val_detail_swing.rates }} I think you'll see it as a tuple without names, just positions.

Upvotes: 1

Related Questions