Аргумент float () должен быть строкой или числом, а не NoneType - PullRequest
0 голосов
/ 28 сентября 2019

Я хочу округлить число с плавающей точкой, чтобы получить 2 цифры после запятой.Но я получаю сообщение об ошибке:

аргумент float () должен быть строкой или числом, а не NoneType

class Story(models.Model):
    ...
    @property
    def average_rating(self):
        return round(float(self.rating_set.all().aggregate(Avg('rating'))['rating__avg']), 2)

class Rating(models.Model):
    rating = models.FloatField(validators=[MinValueValidator(0.0), MaxValueValidator(10.0)])
    story = models.ForeignKey(Story, on_delete=models.CASCADE)
    user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)

Округление в поле рейтинга Рейтингамодель - плохая идея, потому что среднее_рейтинг не будет округлять

1 Ответ

1 голос
/ 28 сентября 2019

Вы вызываете float для такого объекта:

float({'rating__avg': 2.0})

А не для десятичного значения.

Попробуйте изменить свой код следующим образом:

def average_rating(self):
    ratings = self.rating_set.all().aggregate(Avg('rating'))['rating__avg']
    if ratings is Not None:
        return round(float(ratings), 2)

    return None

this:

 model.objects.all().aggregate(...)

вернет {'rating__avg', None}

, если результирующий запрос из model.objects.all() будет пустым.

Я действительноне уверен, почему это происходит в вашем коде.

...