Django — Минимальные / максимальные значения, не отображаемые в индексе

#html #django #min

#HTML #django #минимум

Вопрос:

Я вычисляю минимальные и максимальные значения, чтобы я мог отобразить разброс RRP для модели автомобиля. Здесь у меня просто минимальное значение, которое вычисляется правильно, но оно не будет отображаться в индексном файле, используя рекомендации, которые я получил из различных примеров / сайтов. Очень признателен за любую помощь.

Models.py

 class MotorMakes(models.Model):
    MotorMakeName = models.CharField(max_length=50, unique=True, default=False)
    
    def __str__(self):
        return self.MotorMakeName or ''
    
    def __unicode__(self):
        return u'%s' % (self.MotorMakeName) or ''

class MotorModelsV2(models.Model):
    MotorMakeName =  models.CharField(max_length=50, default=False,)
    MotorModelName = models.CharField(max_length=50, default=False,)
    Mkid = models.ForeignKey(MotorMakes,on_delete=models.CASCADE, default=False)
    Mlid = models.IntegerField(default=False, unique=True)
    MotorImage = models.ImageField(upload_to='Car_Pics', default=False,blank=True)
    
    def __str__(self):
        return self.MotorModelName or ''

    def __unicode__(self):
        return u'%s' % (self.MotorModelName) or ''

    class Meta:
        ordering = ('MotorMakeName',)

class MotorDetail(models.Model):
    MotorMakeName = models.CharField(max_length=50, default=False,)
    MotorModelName = models.CharField(max_length=50, default=False,)
    title =  models.CharField(max_length=100, default=False,)
    fuel =  models.CharField(max_length=25, default=False,)
    body = models.CharField(max_length=25, default=False,)
    engine = models.CharField(max_length=5, default=False,)
    #Mkid = models.CharField(max_length=5, default=False,)
    #Mlid =  models.CharField(max_length=5, default=False,)
    Mkid = models.ForeignKey(MotorMakes,on_delete=models.CASCADE, default=False, null=True)
    Mlid = models.ForeignKey(MotorModelsV2,on_delete=models.CASCADE, default=False, null=True)
    RRP = models.DecimalField(max_digits=10, decimal_places=2, default ='0' )
    MotorImage = models.ImageField(upload_to='Car_Pics', default=False,blank=True)

    def __str__(self):
        #return self.title or ''
        return '%s %s %s' % (self.MotorMakeName,self.MotorModelName, self.title,) or ''

    def __unicode__(self):
        return u'%s' % (self.title) or ''

    class Meta:
        ordering = ('MotorMakeName',)
  

View.py

 def SearchInventory(request):
    if request.method=='GET':
        inputvalue = request.GET['modelselection']
        print(inputvalue)
        DisplayInventory = GarageInventory.objects.all().filter(ListModel=inputvalue) #join to MotorDetails with Title and Body to get the image, as well as the RRP, then just output this to html 
        DisplayImage = MotorModelsV2.objects.all().filter(MotorModelName=inputvalue)
        DisplayRRP=MotorDetail.objects.all().filter(MotorModelName=inputvalue).aggregate(Min('RRP'))
    else:
        DisplayInventory = GarageInventory.objects.all()

    return render(request, 'search_results.html', {'GarageInventoryView':DisplayInventory,'ImageView':DisplayImage, 'RRPView': DisplayRRP })
  

Index.html

 {% for inv in  GarageInventoryView %}
                    <tbody class = "table table-hover">
                         <tr align="center">   
                            <td align="center">{{inv.GarageID}}</td>
                            <td align="center">{{inv.ListModel}}</td>
                            <td align="center">{{inv.ListMake}}</td>
                            <td align="center">{{inv.Title}}</td>
                            <td align="center">{{inv.Year}}</td>
                            <td align="center">{{inv.BodyType}}</td>
                            <td align="center">{{inv.GaragePrice}}</td>
                    
                            <td align="center">Base RRP is {{ RRP__min}}</td>
                    
                            
                    {% for imgs in ImageView %}
                            <td> <img src="{{ imgs.MotorImage.url }}" alt="{{inv.ListModel}} image",height="75", width="120" /></td>
                    {% endfor %}
                         </tr>
                 {% endfor %}
                    </tbody>  
  

Ответ №1:

В вашем views.py вы определили ключ для совокупного результата внутри вашего контекстного словаря как RRPView:

 return render(request, 'search_results.html', {'GarageInventoryView':DisplayInventory,'ImageView':DisplayImage, 'RRPView': DisplayRRP })
  

Но когда вы пытаетесь получить доступ к совокупному значению в вашем шаблоне, вы пытаетесь получить доступ к имени по умолчанию для совокупного значения (RRP__min) вместо ключа, хранящегося в вашем контексте:

 <td align="center">Base RRP is {{ RRP__min}}</td>
  

Измените эту строку на:

 <td align="center">Base RRP is {{ RRPView.RRP__min }}</td>
  

Ваш контекстный словарь содержит ключ с именем RRPView; значение RRPView — это словарь, возвращаемый агрегатной функцией. Внутри этого словаря находится ключ RRP__min, который содержит в качестве значения результат вашего агрегата.