Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将具有外键关系的两个模型数据传递给一个html模板_Python_Django - Fatal编程技术网

Python 将具有外键关系的两个模型数据传递给一个html模板

Python 将具有外键关系的两个模型数据传递给一个html模板,python,django,Python,Django,我有两个模型。第一个是汽车,第二个是评级。我有列表视图,我在这里显示所有汽车,我想显示汽车的平均评级和评级计数也 我尝试在我的汽车模型中添加新字段(平均评分和评分计数),并在提交新评分时更新这些字段。但这并不是我认为的好方法 车型 class Cars(models.Model): name = models.CharField(max_length=255) def __str__(self): return self.name class RatingMo

我有两个模型。第一个是汽车,第二个是评级。我有列表视图,我在这里显示所有汽车,我想显示汽车的平均评级和评级计数也

我尝试在我的汽车模型中添加新字段(平均评分和评分计数),并在提交新评分时更新这些字段。但这并不是我认为的好方法

车型

class Cars(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name
class RatingModel(models.Model):
    reviewed_item = models.ForeignKey(
        Cars,
        on_delete=models.CASCADE
    )
    excellent = models.FloatField(
        max_length=20,
        default=0
    )...
    bad = models.FloatField(
        max_length=20,
        default=0
    )
评级模型

class Cars(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name
class RatingModel(models.Model):
    reviewed_item = models.ForeignKey(
        Cars,
        on_delete=models.CASCADE
    )
    excellent = models.FloatField(
        max_length=20,
        default=0
    )...
    bad = models.FloatField(
        max_length=20,
        default=0
    )
汽车视图

class CarsView(BaseContext, TemplateView):
    template_name = "pages/all_cars.html"

    def get_context_data(self, **kwargs):
        context = super(CarsView, self).get_context_data(**kwargs)
        context["cars"] = Cars.objects.all().order_by("-id")

        return context

正确的方法是使用


这意味着您的
评分
字段是整数,而不是优/差字段。

您可能希望为
评分
模型分配分数,如:

from django.contrib.auth import get_user_model

class Rating(models.Model):
    car = models.ForeignKey(Car, on_delete=models.CASCADE)
    score = models.IntegerField()
    reviewer = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
由此查询集生成的
Car
对象将具有两个额外属性
.avg\u rating
.rating\u count
,它们将包含平均分数和相关
rating
对象的数量

注意:Django车型的名称通常是单数,没有
车型
后缀,因此
汽车
而不是
汽车
,以及
评级
而不是
评级模型


这里的
优秀
不好
是什么?每次用户提交新评分时,我都会增加这些字段。但是,您如何跟踪哪些用户提交了哪些评论?