Ошибка makemigrations в Python / Django - PullRequest
       6

Ошибка makemigrations в Python / Django

0 голосов
/ 27 апреля 2018

Я недавно возился с Python и Django, после этого урока - https://www.codementor.io/jadianes/get-started-with-django-building-recommendation-review-app-du107yb1a

Я буду изменять это приложение по мере продвижения, просто чтобы экспериментировать, однако я немного застопорился с 'makemigrations'.

Когда я запускаю python manage.py makemigrations reviews, я получаю трассировку следующим образом:

 Traceback (most recent call last):   File "manage.py", line 15, in
 <module>
     execute_from_command_line(sys.argv)   File "C:\Users\CalPC\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\management\__init__.py",
 line 371, in execute_from_command_line
     utility.execute()   File "C:\Users\CalPC\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\management\__init__.py",
 line 347, in execute
     django.setup()   File "C:\Users\CalPC\AppData\Local\Programs\Python\Python36\lib\site-packages\django\__init__.py",
 line 24, in setup
     apps.populate(settings.INSTALLED_APPS)   File "C:\Users\CalPC\AppData\Local\Programs\Python\Python36\lib\site-packages\django\apps\registry.py",
 line 112, in populate
     app_config.import_models()   File "C:\Users\CalPC\AppData\Local\Programs\Python\Python36\lib\site-packages\django\apps\config.py",
 line 198, in import_models
     self.models_module = import_module(models_module_name)   File "C:\Users\CalPC\AppData\Local\Programs\Python\Python36\lib\importlib\__init__.py",
 line 126, in import_module
     return _bootstrap._gcd_import(name[level:], package, level)   File "<frozen importlib._bootstrap>", line 994, in _gcd_import   File
 "<frozen importlib._bootstrap>", line 971, in _find_and_load   File
 "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked 
 File "<frozen importlib._bootstrap>", line 665, in _load_unlocked  
 File "<frozen importlib._bootstrap_external>", line 678, in
 exec_module   File "<frozen importlib._bootstrap>", line 219, in
 _call_with_frames_removed   File "C:\Users\CalPC\Desktop\review_app\prodreview\reviews\models.py", line
 2, in <module>
     import numpy as np ModuleNotFoundError: No module named 'numpy'

Вот мои модели

from django.db import models
import numpy as np


class Product(models.Model):
    name = models.CharField(max_length=200)

    def average_rating(self):
        all_ratings = map(lambda x: x.rating, self.review_set.all())
        return np.mean(all_ratings)

    def __unicode__(self):
        return self.name

class Review(models.Model):
    RATING_CHOICES = (
        (1, '1'),
        (2, '2'),
        (3, '3'),
        (4, '4'),
        (5, '5'),
    )
    product = models.ForeignKey(Product)
    pub_date = models.DateTimeField('date published')
    user_name = models.CharField(max_length=100)
    comment = models.CharField(max_length=200)
    rating = models.IntegerField(choices=RATING_CHOICES)

Я использую Django 2.0 и python 3.6.5

Если бы кто-нибудь мог указать, где я могу пойти не так, это было бы замечательно.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Вам не нужно numpy, если вы используете его только для вычисления среднего значения. Вместо этого вы можете использовать statistics.mean.

import statistics

class Product(models.Model):
    name = models.CharField(max_length=200)

    def average_rating(self):
        all_ratings = map(lambda x: x.rating, self.review_set.all())
        return statistics.mean(all_ratings)

Вы также можете использовать aggregate, чтобы получить базу данных для расчета среднего.

from django.db.models import Avg

def average_rating(self):
    return self.review_set.aggregate(avg_rating=Avg('rating'))['avg_rating']

Или annotate может быть полезно, если вы хотите получить среднее значение для каждого продукта в наборе запросов.

Product.objects.annotate(avg_rating=Avg('review__rating'))
0 голосов
/ 27 апреля 2018

Убедитесь, что numpy в вашем файле требований, а затем pip install -r requirements.txt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...