在引用另一个模型时使用Django的注释功能?

问题描述 投票:1回答:1

我有三个模型:用户,电影和评级模型:

class User(models.Model):
    user_id = models.IntegerField(primary_key=True)

class Movie(models.Model):
    movie_id = models.IntegerField(primary_key=True)
    imdb_rating = models.FloatField(null=True)
    rt_rating = models.IntegerField(null=True)

class Rating(models.Model):
    rating_id = models.IntegerField(primary_key=True)
    user = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        related_name='ratings'
    )
    movie = models.ForeignKey(
        Movie,
        on_delete=models.CASCADE,
        related_name='ratings'
    )
    rating = models.FloatField()

对于评级,我想以一种方式注释,我有Rating.ratingMovie.imdb_rating的区别。

我也有userRatings,其中只包含id = 1的用户评级,以简化操作。

我试过用

userRating.annotate(imdb_diff=Value('rating') - Value('movie__imdb_rating'))

但是我得到了错误

django.core.exceptions.FieldError: Cannot resolve expression type, unknown output_field

我将如何获得正确的注释。

python django django-models django-orm
1个回答
2
投票

不要混淆Value(用于文字值)和F(用于数据库列名):

userRating.annotate(imdb_diff=F('rating')-F('movie__imdb_rating'))
© www.soinside.com 2019 - 2024. All rights reserved.