Django:使用另一个没有forign键约束的表连接的Aggregate和Sum

时间:2015-09-05 20:00:24

标签: django django-models django-views django-orm

这是我的models.py文件。

from django.db import models
from django.contrib.auth.models import User   
class image(models.Model):
    name  = models.CharField(max_length = 200)
    src = models.URLField()
    alt  = models.CharField(max_length = 200)
    points = models.IntegerField(default = 0)
    id  = models.CharField(max_length = 200, primary_key = True)
    hotelId = models.IntegerField()
    def __unicode__(self):
        return self.name   
class imagescore(models.Model): 
    user = models.ForeignKey(User)
    image_id = models.CharField(max_length = 200)
    score = models.IntegerField(default = 1)
    createdTime = models.DateTimeField(auto_now_add =True)
    def __unicode__(self):
        if self.score < 0: 
            status = " rejected "
        else: 
            status = "approved"
        return (self.user+ status+ image_id)
        pass

我想将一个表格传递给我的模板,该表格是SQL查询的结果:

    select  ei.id,ei.src, ei.hotelId , sum(score) 
from eyeballing_image ei LEFT join eyeballing_imagescore eis on ei.id = eis.image_id

where user_id = request.user.id and  ei.hotelId = 56565 
group by 
ei.id,ei.src, ei.hotelId

我的应用名称很吸引眼球。我尝试使用连接和过滤器我无法使其工作。

此外,我尝试将总和(得分)部分放入单独的字典中,并在模板中检查相同内容。没有工作

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的查询有两个问题,一个是列名hotelId。您必须以这种方式在查询中使用它{。{1}}。

其他问题是条件ei."hotelId",因为你在sql中没有user_id = request.user.id,你必须用一个值替换它。

request中的另一个问题可能是return (self.user + status + image_id)